Значение <br типа java.lang.String не может быть преобразовано в JSONObject на android

Это мой код 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 { // 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-код: я использовал массив в this.suggest me, почему возникает несоответствие типов

  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.(JSONObject.java:158) 04-16 12:54:57.916: W/System.err(1603): at org.json.JSONObject.(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): 
04-16 15:50:10.575: I/returning(1579): 04-16 15:50:10.575: I/returning(1579): 04-16 15:50:10.575: I/returning(1579): 04-16 15:50:10.575: I/returning(1579): 04-16 15:50:10.575: I/returning(1579): 04-16 15:50:10.575: I/returning(1579):
( ! ) Notice: Undefined index: data2 in C:\wamp\www\gcm_server_files\validate_device.php on line 6
Call Stack
#TimeMemoryFunctionLocation
10.0193145240{main}( )..\validate_device.php:0
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}( )..\validate_device.php:0 04-16 16:17:49.925: W/System.err(4958):  04-16 16:17:49.925: W/System.err(4958): {"Android":[{"regid":"","name":"","email":"","imei":"","status":"install"}]} 

2 Solutions collect form web for “Значение <br типа java.lang.String не может быть преобразовано в JSONObject на android”

О вашем HTML

Вы пытаетесь избавиться от некоторого HTML-кода, который на самом деле говорит вам о наличии ошибки. Вот как это выглядит:

интерпретированный ответ HTML

Возможно, если вы решите эту проблему, ваша проблема JSON исчезнет сама по себе, потому что у вас не будет содержимого HTML перед вашим JSON.


Ранее часть ответа

Я думаю, вы получаете свое исключение в этой строке (скажите, пожалуйста, если я ошибаюсь):

 jsonResponse = new JSONObject(Content); 

Если вы хотите знать, что не так с синтаксическим parsingом Content , вы можете записать эту строку и посмотреть, как она выглядит.

По-видимому, Content – это HTML-код (он содержит некоторые
, в соответствии с исключением) вместо правильной строки JSON. Посмотрите, откуда вы взяли эту строку, это, вероятно, ваша проблема.


ОБНОВИТЬ:

ОК, в соответствии с тем, что вы разместили, строка Content содержит строку 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 перед запуском предыдущего fragmentа :

 Content = Content.replaceFirst(".*?", ""); 

ПРЕДУПРЕЖДЕНИЕ: Это очень схематично и отвечает только на эту конкретную проблему. Он не будет работать с каждым возможным ответом сервера.

Вы должны взглянуть на другие вопросы, касающиеся удаления HTML из String в Java, для получения более полных ответов.

Вы должны отредактировать файл конфигурации php.

Найдите строку:

 error_reporting = E_ALL 

и заменить на:

 error_reporting = E_ALL ^ E_DEPRECATED 

Если у вас нет доступа к файлу конфигурации, вы можете добавить эту строку в файл wordpress php (возможно, headers.php ):

 error_reporting(E_ALL ^ E_DEPRECATED); 
  • Отключить язык приложений гипертекста (HAL) в JSON?
  • Многостраничный запрос Spring MVC с JSON
  • json Uncaught SyntaxError: Неожиданный токен:
  • Как вернуть данные JSON из весеннего controllerа с помощью @ResponseBody
  • Как я могу десериализовать JSON для простого словаря в ASP.NET?
  • Как получить JSON в качестве параметра метода MVC 5
  • Как я могу разобрать строку JSON, которая приведет к незаконным идентификаторам C #?
  • JsonMappingException: из токена START_ARRAY
  • Массивы декодирования Swift JSONDecode терпят неудачу, если сбой одного элемента
  • Десериализация JSON с использованием JSon.NET с динамическими данными
  • Как перебирать JSONObject?
  • Давайте будем гением компьютера.