gpt4 book ai didi

android - java.lang.String 类型的值
转载 作者:行者123 更新时间:2023-11-29 19:09:32 25 4
gpt4 key购买 nike

这是我的java代码,我遇到了问题:W/System.err(1362): org.json.JSONException: Value

public class Main extends Activity {

// label to display gcm messages
TextView lblMessage;
Controller aController;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/******************* Intialize Database *************/
DBAdapter.init(this);

// Get Global Controller Class object
// (see application tag in AndroidManifest.xml)
aController = (Controller) getApplicationContext();


// Check if Internet present
if (!aController.isConnectingToInternet()) {

// Internet Connection is not present
aController.showAlertDialog(Main.this,
"Internet Connection Error",
"Please connect to Internet connection", false);
// stop executing code by return
return;
}

//Check device contains self information in sqlite database or not.
int vDevice = DBAdapter.validateDevice();

if(vDevice > 0)
{

// Launch Main Activity
Intent i = new Intent(getApplicationContext(), GridViewExample.class);
startActivity(i);
finish();
}
else
{
String deviceIMEI = "";
if(Config.SECOND_SIMULATOR){

//Make it true in CONFIG if you want to open second simutor
// for testing actually we are using IMEI number to save a unique device

deviceIMEI = "000000000000000";
}
else
{
// GET IMEI NUMBER
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
deviceIMEI = tManager.getDeviceId();
}

/******* Validate device from server ******/
// WebServer Request URL
String serverURL = Config.YOUR_SERVER_URL+"validate_device.php";

// Use AsyncTask execute Method To Prevent ANR Problem
LongOperation serverRequest = new LongOperation();

serverRequest.execute(serverURL,deviceIMEI,"","");

}

}


// Class with extends AsyncTask class
public class LongOperation extends AsyncTask<String, Void, String> {

// Required initialization

//private final HttpClient Client = new DefaultHttpClient();
// private Controller aController = null;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(Main.this);
String data ="";
int sizeData = 0;


protected void onPreExecute() {
// NOTE: You can call UI Element here.

//Start Progress Dialog (Message)

Dialog.setMessage("Validating Device..");
Dialog.show();

}

// Call after onPreExecute method
protected String doInBackground(String... params) {

/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
String Content = "";
// Send data
try{

// Defined URL where to send data
URL url = new URL(params[0]);

// Set Request parameter
if(!params[1].equals(""))
data +="&" + URLEncoder.encode("data1", "UTF-8") + "="+params[1].toString();
if(!params[2].equals(""))
data +="&" + URLEncoder.encode("data2", "UTF-8") + "="+params[2].toString();
if(!params[3].equals(""))
data +="&" + URLEncoder.encode("data3", "UTF-8") + "="+params[3].toString();
Log.i("GCM",data);

// Send POST data request

URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();

// Get the server response

reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;

// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "\n");
}

// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{

reader.close();
}

catch(Exception ex) {}
}

/*****************************************************/
return Content;
}

protected void onPostExecute(String Content) {
// NOTE: You can call UI Element here.

// Close progress dialog
Dialog.dismiss();

if (Error != null) {


} else {

// Show Response Json On Screen (activity)

/****************** Start Parse Response JSON Data *************/
aController.clearUserData();

JSONObject jsonResponse;

try {

/****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
jsonResponse = new JSONObject(Content);

/***** Returns the value mapped by name if it exists and is a JSONArray. ***/
/******* Returns null otherwise. *******/
JSONArray jsonMainNode = jsonResponse.optJSONArray("Android");

/*********** Process each JSON Node ************/

int lengthJsonArr = jsonMainNode.length();

for(int i=0; i < lengthJsonArr; i++)
{
/****** Get Object for each JSON node.***********/
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);

/******* Fetch node values **********/
String Status = jsonChildNode.optString("status").toString();

Log.i("GCM","---"+Status);

// IF server response status is update
if(Status.equals("update")){

String RegID = jsonChildNode.optString("regid").toString();
String Name = jsonChildNode.optString("name").toString();
String Email = jsonChildNode.optString("email").toString();
String IMEI = jsonChildNode.optString("imei").toString();

// add device self data in sqlite database
DBAdapter.addDeviceData(Name, Email,RegID, IMEI);

// Launch GridViewExample Activity
Intent i1 = new Intent(getApplicationContext(), GridViewExample.class);
startActivity(i1);
finish();

Log.i("GCM","---"+Name);
}
else if(Status.equals("install")){

// Launch RegisterActivity Activity
Intent i1 = new Intent(getApplicationContext(), RegisterActivity.class);
startActivity(i1);
finish();

}


}

/****************** End Parse Response JSON Data *************/


} catch (JSONException e) {

e.printStackTrace();
}


}
}

}




@Override
protected void onDestroy() {

super.onDestroy();
}

}

PHP 代码:我在其中使用了一个数组。请告诉我为什么会发生类型不匹配

<?php

require_once('loader.php');

$imei = $_REQUEST['data1'];
$regID = $_REQUEST['data2'];

//$resultUsers = getRegIDUser($regID);
$resultUsers = getIMEIUser($imei);

if ($resultUsers != false)
$NumOfUsers = mysql_num_rows($resultUsers);
else
$NumOfUsers = 0;

$jsonData = array();

if ($NumOfUsers > 0) {

while ($rowUsers = mysql_fetch_array($resultUsers)) {


$jsonTempData = array();

$jsonTempData['regid'] = $rowUsers["gcm_regid"];
$jsonTempData['name'] = $rowUsers["name"];
$jsonTempData['email'] = $rowUsers["email"];
$jsonTempData['imei'] = $rowUsers["imei"];
$jsonTempData['status'] = "update";

$jsonData[] = $jsonTempData;

}
}
else{

$jsonTempData = array();

$jsonTempData['regid'] = "";
$jsonTempData['name'] = "";
$jsonTempData['email'] = "";
$jsonTempData['imei'] = "";
$jsonTempData['status'] = "install";

$jsonData[] = $jsonTempData;

}

$outputArr = array();
$outputArr['Android'] = $jsonData;

// Encode Array To JSON Data
print_r( json_encode($outputArr));

?>

遇到问题....!!

以下是有关异常的详细信息..

04-16 12:54:57.876: W/System.err(1603): org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
04-16 12:54:57.916: W/System.err(1603): at org.json.JSON.typeMismatch(JSON.java:111)
04-16 12:54:57.916: W/System.err(1603): at org.json.JSONObject.<init>(JSONObject.java:158)
04-16 12:54:57.916: W/System.err(1603): at org.json.JSONObject.<init>(JSONObject.java:171)
04-16 12:54:57.916: W/System.err(1603): at com.androidexample.mobilegcm.Main$LongOperation.onPostExecute(Main.java:213)
04-16 12:54:57.926: W/System.err(1603): at com.androidexample.mobilegcm.Main$LongOperation.onPostExecute(Main.java:1)
04-16 12:54:57.926: W/System.err(1603): at android.os.AsyncTask.finish(AsyncTask.java:631)
04-16 12:54:57.946: W/System.err(1603): at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-16 12:54:57.976: W/System.err(1603): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-16 12:54:57.976: W/System.err(1603): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 12:54:57.976: W/System.err(1603): at android.os.Looper.loop(Looper.java:137)
04-16 12:54:58.007: W/System.err(1603): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-16 12:54:58.007: W/System.err(1603): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 12:54:58.016: W/System.err(1603): at java.lang.reflect.Method.invoke(Method.java:511)
04-16 12:54:58.026: W/System.err(1603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-16 12:54:58.036: W/System.err(1603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-16 12:54:58.036: W/System.err(1603): at dalvik.system.NativeStart.main(Native Method)

这是日志中返回的所有内容...

04-16 15:50:10.575: I/returning(1579): <br />
04-16 15:50:10.575: I/returning(1579): <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
04-16 15:50:10.575: I/returning(1579): <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: data2 in C:\wamp\www\gcm_server_files\validate_device.php on line <i>6</i></th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
04-16 15:50:10.575: I/returning(1579): <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0193</td><td bgcolor='#eeeeec' align='right'>145240</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\gcm_server_files\validate_device.php' bgcolor='#eeeeec'>..\validate_device.php<b>:</b>0</td></tr>
04-16 15:50:10.575: I/returning(1579): </table></font>
04-16 15:50:10.575: I/returning(1579): {"Android":[{"regid":"","name":"","email":"","imei":"","status":"install"}]}

仍然返回 html 代码的这么多部分..我只需要从 {"Android"} 开​​始的代码部分...即仅最后一行..

04-16 16:17:49.925: W/System.err(4958): org.json.JSONException: Expected ':' after main at character 6 of {main}(  )</td><td title='C:\wamp\www\gcm_server_files\validate_device.php' bgcolor='#eeeeec'>..\validate_device.php<b>:</b>0</td></tr>
04-16 16:17:49.925: W/System.err(4958): </table></font>
04-16 16:17:49.925: W/System.err(4958): {"Android":[{"regid":"","name":"","email":"","imei":"","status":"install"}]}

最佳答案

关于您的 HTML

您正在尝试删除一些实际上告诉您存在错误的 HTML 代码。它看起来像这样:

interpreted HTML response

也许如果你解决了这个问题,你的 JSON 问题就会自行消失,因为你的 JSON 之前不会有 HTML 内容。

<小时/>

响应的前半部分

我猜你在这一行遇到了异常(如果我错了,请告诉我):

jsonResponse = new JSONObject(Content);

如果你想知道Content的解析出了什么问题,您可能想要记录该字符串并查看它的外观。

显然,Content是 HTML 代码(根据异常(exception),它包含一些 <br )而不是正确的 JSON 字符串。看看你从哪里得到这个字符串,这可能是你的问题。

<小时/>

更新:

好的,根据您发布的内容,您的Content string 包含 JSON 字符串(用大括号 {} 包围的字符串),但它还包含需要删除的 HTML 部分。

在尝试创建 JSONObject 之前放置此代码:

int jsonStart = Content.indexOf("{");
int jsonEnd = Content.lastIndexOf("}");

if (jsonStart >= 0 && jsonEnd >= 0 && jsonEnd > jsonStart) {
Content = Content.substring(jsonStart, jsonEnd + 1);
} else {
// deal with the absence of JSON content here
}
<小时/>

更新2:

前面的代码 fragment 似乎不够,因为您的 HTML 包含大括号 ( {} )。如果服务器总是返回这种 HTML,您可能只想删除 font标记在运行上一个代码段之前:

Content = Content.replaceFirst("<font>.*?</font>", "");

警告:这非常粗略,仅回答这个非常特殊的问题。它不适用于所有可能的服务器响应。

您应该查看有关从 Java 中的字符串中删除 HTML 的其他问题,以获得更完整的答案。

关于android - java.lang.String 类型的值 <br 无法在 Android 上转换为 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195412/

25 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com