org.json.JSONObject无法在android中转换为JSONArray

当我尝试在我的本地主机,它的工作发现。 这是我的本地主机提供的JSON。

是这个错误在这个urlhttp://api.androidhive.info/contacts/

[{ "id": "1", "first_name": "man", "last_name": "woman", "username": "man", "password": "4f70432e6369 70de9929bcc6f1b72412", "email": "man@gmail.com", "url": "http:\/\/localhost\/adchara1\/" }, { "id": "6", "first_name": "first", "last_name": "Last Name", "username": "user", "password": "1a1dc91c907325c69271ddf0c944bc72", "email": "0", "url": "ht tp:\/\/api.androidhive.info\/contacts\/" }, { "id": "7", "first_name": "1", "last_name": "2", "username": "us45", "password": "33d8f54e33896a5722 7b18642979e558", "email": "first@gmail.com", "url": "http:\/\/ugirusgiarto.wordpress.com\/2011\ /10\/27\/json-php-mysql-with-asynctask-progressdialog\/" }, { "id": "9", "first_name": "First Name", "last_name": "Last Name", "username": "Username", "password": "dc647eb65e6711e155375218212b3964", "email": "woman@gm ail.com", "url": "http:\/\/mobile.cs.fsu.edu\/parse-json-objects-in-asynctask\/" }] 

X

主要活动

 public class MainActivity extends Activity { TextView text_1, text_2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new task().execute(); } class task extends AsyncTask<String, String, Void> { private ProgressDialog progressDialog = new ProgressDialog( MainActivity.this); InputStream is = null; String result = ""; protected void onPreExecute() { progressDialog.setMessage("Download data..."); progressDialog.show(); progressDialog.setOnCancelListener(new OnCancelListener() { public void onCancel(DialogInterface arg0) { task.this.cancel(true); } }); } @Override protected Void doInBackground(String... params) { // String url_select = "http://192.168.10.111/adchara1/"; String url_select = "http://api.androidhive.info/contacts/"; HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url_select); ArrayList<NameValuePair> param = new ArrayList<NameValuePair>(); try { httpPost.setEntity(new UrlEncodedFormEntity(param)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); // read content is = httpEntity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); } try { BufferedReader br = new BufferedReader( new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { // TODO: handle exception Log.e("log_tag", "Error converting result " + e.toString()); } return null; } protected void onPostExecute(Void v) { // ambil data dari Json database try { JSONArray Jarray = new JSONArray(result); for (int i = 0; i < Jarray.length(); i++) { JSONObject Jasonobject = null; text_1 = (TextView) findViewById(R.id.txt1); Jasonobject = Jarray.getJSONObject(i); // get an output on the screen String id = Jasonobject.getString("id"); String name = Jasonobject.getString("name"); String email = Jasonobject.getString("email"); String address = Jasonobject.getString("address"); String gender = Jasonobject.getString("gender"); text_1.append("\n" + id + "\t\t" + name + "\t\t\t" + email + "\t\t\t\t" + address + "\t\t\t\t" + gender + "\t\t\t\t" + "\n"); } this.progressDialog.dismiss(); } catch (Exception e) { // TODO: handle exception Log.e("log_tag", "Error parsing data " + e.toString()); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

错误

 Error parsing data org.json.JSONException: Value { "contacts": [{ "id": "c200", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "ravi@gmail.com", "name": "Ravi Tamada" }, { "id": "c201", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "johnny_depp@gmail.com", "name": "Johnny Depp" }, { "id": "c202", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "leonardo_dicaprio@gmail.com", "name": "Leonardo Dicaprio" }, { "id": "c203", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "john_wayne@gmail.com", "name": "John Wayne" }, { "id": "c204", "gender": "female", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "angelina_jolie@gmail.com", "name": "Angelina Jolie" }, { "id": "c205", "gender": "female", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "dido@gmail.com", "name": "Dido" }, { "id": "c206", "gender": "female", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "adele@gmail.com", "name": "Adele" }, { "id": "c207", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "hugh_jackman@gmail.com", "name": "Hugh Jackman" }, { "id": "c208", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "will_smith@gmail.com", "name": "Will Smith" }, { "id": "c209", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "clint_eastwood@gmail.com", "name": "Clint Eastwood" }, { "id": "c2010", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "barack_obama@gmail.com", "name": "Barack Obama" }, { "id": "c2011", "gender": "female", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "kate_winslet@gmail.com", "name": "Kate Winslet" }, { "id": "c2012", "gender": "male", "phone": { "office": "00 000000", "home": "00 000000", "mobile": "+91 0000000000" }, "address": "xx-xx-xxxx,x - street, x - country", "email": "eminem@gmail.com", "name": "Eminem" }] } of type org.json.JSONObject cannot be converted to JSONArray 

Solutions Collecting From Web of "org.json.JSONObject无法在android中转换为JSONArray"

你可以试试这个:

 JSONObject object = new JSONObject(result); JSONArray Jarray = object.getJSONArray("contacts"); for (int i = 0; i < Jarray.length(); i++) { JSONObject Jasonobject = Jarray.getJSONObject(i); } 

url( http://api.androidhive.info/contacts/ )返回一个JSON对象,而不是一个JSON数组…

这里:

 JSONArray Jarray = new JSONArray(result); for (int i = 0; i < Jarray.length(); i++) { JSONObject Jasonobject = null; 

你假设结果是一个JSON数组。 如果你像下面这样做,它将工作:

 JSONObject Jasonobject = new JSONObject(result); JSONArray Jarray = Jasonobject.getJSONArray("contacts"); for (int i = 0; i < Jarray.length(); i++) { ...} 

尝试使用这个

 JSONObject Jarray = new JSONObject(result); 

代替

 JSONArray Jarray = new JSONArray(result); 

和下一个

 JSONArray Jarray = Jasonobject.getJSONArray("contacts"); 

并继续for循环

从URL下载图片

将URL传递给这个特定的方法,你可以下载图像到gridview

 private void downloadImage(String urlStr) { final String url = urlStr; InputStream in = null; Message msg = Message.obtain(); msg.what = 1; try { in = openHttpConnection(url); bitmap = BitmapFactory.decodeStream(in); Bundle b = new Bundle(); b.putParcelable("bitmap", bitmap); msg.setData(b); in.close(); } catch (Exception e1) { e1.printStackTrace(); } } private InputStream openHttpConnection(String urlStr) { InputStream in = null; int resCode = -1; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); if (!(urlConn instanceof HttpURLConnection)) { throw new IOException ("URL is not an Http URL"); } HttpURLConnection httpConn = (HttpURLConnection)urlConn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.connect(); resCode = httpConn.getResponseCode(); if (resCode == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return in; } 

尝试以下转换:

  JSONObject js= new JSONObject(yourjsonobjectvalue); JSONArray jA = js.getJSONArray("String value"); 

该错误表明你的JSON是一个JSON Object而不是一个JSON Array

更改:

 JSONArray Jarray = new JSONArray(result) 

 JSONObject someObject = new JSONObject(result); JSONArray Jarray = Jarray.getJSONArray("contacts"); 
  // getting JSON string from URL JSONObject json = jParser.getJSONFromUrl(uri.toString()); try { //Obter objeto JSON clientesJSONArray = json.optJSONArray(Clientes.TABELA); //Se for 1 objeto não virá em JSONArray - Os objetos em JSON são separados //por colchetes [] - No caso de um objeto, não será array e sim um simples //objeto em JSON if(clientesJSONArray==null){ // means item is JSONObject instead of JSONArray //json = obj.optJSONObject("offerRideResult"); JSONObject obj = json.getJSONObject(Clientes.TABELA); Clientes oCliente = new Clientes(); oCliente.setCliente(obj.getString(Clientes.CLIENTE)); oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE)); oCliente.setE_mail(obj.getString(Clientes.E_MAIL)); oCliente.setUsuario(obj.getString(Clientes.USUARIO)); oCliente.setUsuario(obj.getString(Clientes.SENHA)); clientesList.add(oCliente); }else{ // Mais de um objeto JSON separado por colchetes [] - JSONArray ao invés JSONObject for (int i = 0; i < clientesJSONArray.length(); i++) { JSONObject obj = clientesJSONArray.getJSONObject(i); Clientes oCliente = new Clientes(); oCliente.setCliente(obj.getString(Clientes.CLIENTE)); oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE)); oCliente.setE_mail(obj.getString(Clientes.E_MAIL)); oCliente.setUsuario(obj.getString(Clientes.USUARIO)); oCliente.setUsuario(obj.getString(Clientes.SENHA)); clientesList.add(oCliente); } }