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

10,105

As pointed out in the comments to your question, it appears that your server is returning XML rather than JSON. You can easily confirm this by just outputting result:

}catch(JSONException e){
    Log.e("log_tag", "Error parsing data "+e.toString());
    Log.e("log_tag", "Failed data was:\n" + result);
}

If it's XML, which it almost certainly must be, then you either need to get the server to output JSON or you need to parse the XML that it's sending you.

Share:
10,105
Alan Cor
Author by

Alan Cor

Updated on June 26, 2022

Comments

  • Alan Cor
    Alan Cor almost 2 years

    I am writing an app intend to run on android devices.The app is supossed to read the information in a Mysql database through php, but when I run the application, Log cat prompts an error 'Error parsing data org.json.JSONException: Value

    The code I've got was downloaded from a tutorial, please be patient I've got some basic knowledge in php and very few in java. I already tested the php script and it is working flawlessly, so I won't bother to attach it.

    main.java code:

     

    package test.an2mysql; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import org.apache.http.HttpEntity; 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.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; 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.util.Log; import android.widget.LinearLayout; import android.widget.TextView; public class main extends Activity { /** Called when the activity is first created. */ TextView txt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create a crude view - this should really be set via the layout resources // but since its an example saves declaring them in the XML. LinearLayout rootLayout = new LinearLayout(getApplicationContext()); txt = new TextView(getApplicationContext()); rootLayout.addView(txt); setContentView(rootLayout); // Set the text and call the connect function. txt.setText("Connecting..."); //call the method to run the data retreival txt.setText(getServerData(KEY_121)); } public static final String KEY_121 = "http://10.1.1.19/cms/test/android2mysql/read.php"; //i use my real ip here private String getServerData(String returnString) { InputStream is = null; String result = ""; //the data to send ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("country","undefined")); //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(KEY_121); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //parse json data try{ 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("id")+ ", country: "+json_data.getString("country")+ ", documentn: "+json_data.getInt("documentn") ); //Get an output to the screen returnString += "\n\t" + jArray.getJSONObject(i); } }catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); } return returnString; } }

    I would kindly appreciate any help you could give me.