Я получаю Error parsing data org.json.JSONException

Я получаю эту ошибку в своем LogCat:

Error parsing data org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONArray 

Ниже приведены все файлы, которые я могу вам показать! Пожалуйста, дайте мне знать проблему и ее решение как можно скорее. Я полагаю, что: 1. Возможно, проблема заключается в анализе данных в массиве JSON. 2. Возможно, проблема связана с моим php api, я думаю, что я неправильно кодирую json_encode, потому что он дает мне RAW JSON, как и все в одной строке.

как ниже

 [{"uid":"120","name":"MyFirstName MyLastName"}] 

Пожалуйста, также дайте мне знать, их разница в работе обоих форматов, 1. Raw JSON и 2. Intented Json

ниже представленный формат json

 [ { "uid":"120", "name":"MyFirstName MyLastName" } ] 

Вот JSONUseActivity.java

 package com.example.oncemore; import java.util.ArrayList; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import com.example.oncemore.CustomHttpClient; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class JSONUseActivity extends Activity { EditText email,password; Button submit; TextView tv; // TextView to show the result of MySQL query String returnString; // to store the result of MySQL query after decoding // JSON /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is // most commonly // used to catch // accidental // disk or // network // access on the // application's // main thread .penaltyLog().build()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_jsonuse); email = (EditText) findViewById(R.id.email); password = (EditText) findViewById(R.id.password); submit = (Button) findViewById(R.id.submitbutton); tv = (TextView) findViewById(R.id.showresult); // define the action when user clicks on submit button submit.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // declare parameters that are passed to PHP script ie the ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); // define the parameter postParameters.add(new BasicNameValuePair("email",email.getText().toString())); postParameters.add(new BasicNameValuePair("password",password.getText().toString())); String response = null; // call executeHttpPost method passing necessary parameters try { response = CustomHttpClient.executeHttpPost( "http://mywebsite.com/android/api.php", postParameters); // store the result returned by PHP script that runs MySQL // query String result = response.toString(); // parse json data try { returnString = ""; //I think the line below is creating some problem JSONArray jArray = new JSONArray(result); for (int i = 0; i < jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i); Log.i("log_tag", "id: " + json_data.getInt("uid")+", name: " + json_data.getString("name")); // Get an output to the screen returnString += "\n" + json_data.getString("name") + " -> " + json_data.getInt("uid"); } }catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } try { tv.setText(returnString); } catch (Exception e) { Log.e("log_tag", "Error in Display!" + e.toString()); ; } } catch (Exception e) { Log.e("log_tag", "Error in http connection!!" + e.toString()); } } }); } 

}

Вот CustomHttpClient.java

 package com.example.oncemore; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.ArrayList; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import android.util.Log; public class CustomHttpClient { /** The time it takes for our client to timeout */ public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds /** Single instance of our HttpClient */ private static HttpClient mHttpClient; /** * Get our single instance of our HttpClient object. * * @return an HttpClient object with connection parameters set */ private static HttpClient getHttpClient() { if (mHttpClient == null) { mHttpClient = new DefaultHttpClient(); final HttpParams params = mHttpClient.getParams(); HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT); HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT); ConnManagerParams.setTimeout(params, HTTP_TIMEOUT); } return mHttpClient; } /** * Performs an HTTP Post request to the specified url with the specified * parameters. * * @param url * The web address to post the request to * @param postParameters * The parameters to send via the request * @return The result of the request * @throws Exception */ public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception { BufferedReader in = null; try { HttpClient client = getHttpClient(); HttpPost request = new HttpPost(url); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); request.setEntity(formEntity); HttpResponse response = client.execute(request); in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String result = sb.toString(); return result; } finally { if (in != null) { try { in.close(); } catch (IOException e) { Log.e("log_tag", "Error converting result "+e.toString()); e.printStackTrace(); } } } } /** * Performs an HTTP GET request to the specified url. * * @param url * The web address to post the request to * @return The result of the request * @throws Exception */ public static String executeHttpGet(String url) throws Exception { BufferedReader in = null; try { HttpClient client = getHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(url)); HttpResponse response = client.execute(request); in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String result = sb.toString(); return result; } finally { if (in != null) { try { in.close(); } catch (IOException e) { Log.e("log_tag", "Error converting result "+e.toString()); e.printStackTrace(); } } } } } 

Вот api.php

 <?php require_once("../contactdb.php"); $myusername=$_REQUEST["email"]; $mypassword=$_REQUEST["password"]; // To protect MySQL injection (more detail about MySQL injection) $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $sql="SELECT uid,name FROM u_info WHERE email='".$myusername."' AND password ='".$mypassword."'"; $result=mysql_query($sql); // Mysql_num_row is counting table row $count=mysql_num_rows($result); if($count==1){ while($row=mysql_fetch_assoc($result)) $output[]=$row; echo json_encode($output); mysql_close(); }else{ echo "Error Occured!"; } ?> в <?php require_once("../contactdb.php"); $myusername=$_REQUEST["email"]; $mypassword=$_REQUEST["password"]; // To protect MySQL injection (more detail about MySQL injection) $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $sql="SELECT uid,name FROM u_info WHERE email='".$myusername."' AND password ='".$mypassword."'"; $result=mysql_query($sql); // Mysql_num_row is counting table row $count=mysql_num_rows($result); if($count==1){ while($row=mysql_fetch_assoc($result)) $output[]=$row; echo json_encode($output); mysql_close(); }else{ echo "Error Occured!"; } ?> 

Наконец, когда я перейду в браузер и напишу вот так

 http://mywebsite.com/android/api.php?email=myname@yahoo.com&password=1234 

Я получил этот массив json!

 [{"uid":"120","name":"MyFirstName MyLastName"}] 

До сих пор я google, я нашел разные форматы json-массива! Я повсюду нашел Надуманного Джсона. Мой массив json в настоящее время находится в формате Raw Json. Я не нашел нигде, как преобразовать формат Raw Json в формат Intented Json.

Спасибо заранее, ребята! Любая помощь будет оценена! Если возможно, предоставьте правильный код!

Это НЕВОЗМОЖНО синтаксис JSON:

 { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } 

Действует.

Примечание: Это также верно:

{"employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }

Синтаксическая структура – важная часть, а не форматирование с точки зрения отступов.

В противном случае, чтобы использовать возвращаемый fomat, вам нужно вырезать подстроку из ответа, т. Е. Избавиться от квадратных скобок, окружающих фигурные скобки.

В PHP я создаю правильный ответ json следующим образом:

 // array for JSON response $response = array(); $response["apps"] = array(); $apps = array(); $apps["name"] = $row["name"]; $apps["package"] = $row["package"]; $apps["version"] = $row["version"]; $apps["dateversion"] = $row["dateversion"]; array_push($response["apps"], $apps); $response["success"] = 1; echo json_encode($response); 

Это в основном дает

 { "success":"1", "apps":{["name":"NAME", "package":"PACKAGE", "version":"VERSION", "dateversion":"DATEVERSION"]}} 

который может быть правильно проанализирован с помощью любого из распространенных примеров классов JSON, которые вы можете использовать. Взлом и использование подстроки для ручного удаления первых N символов НЕ являются хорошей практикой …