2012-10-04 23 views
8

Cuando intento en mi servidor local, funciona find. este es el JSON que proporciona mi servidor local.org.json.JSONObject no se puede convertir a JSONArray en android

Y es error en esta url http://api.androidhive.info/contacts/

  [{ 
    "id": "1", 
    "first_name": "man", 
    "last_name": "woman", 
    "username": "man", 
    "password": "4f70432e6369 
70de9929bcc6f1b72412", 
    "email": "[email protected]", 
    "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": "[email protected]", 
    "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": "[email protected] 
ail.com", 
    "url": "http:\/\/mobile.cs.fsu.edu\/parse-json-objects-in-asynctask\/" 
}] 

x

MainActivity

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

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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "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": "[email protected]", 
     "name": "Eminem" 
    }] 
} 
of type org.json.JSONObject cannot be converted to JSONArray 
+0

Sugiero que intentes con algo que sabes que es un JSONArray válido para asegurarte de que tu código funcione y luego verificar si esto es de hecho un JSONArray válido. Puede usar herramientas como la extensión "JSON Formatter" de Google Chrome para ayudarlo a leer JSON de forma indentada y formateada. –

Respuesta

15

Usted podría intentar esto:

JSONObject object = new JSONObject(result); 
JSONArray Jarray = object.getJSONArray("contacts"); 

for (int i = 0; i < Jarray.length(); i++) 
{ 
    JSONObject Jasonobject = Jarray.getJSONObject(i); 
} 
+1

podría resolver este su http://stackoverflow.com/questions/12739824/image-viewer-get-image-from- url-que-dar-imagen-path-as-JSON-string – kongkea

+1

@RajaReddy PolamReddy excelente respuesta –

1

intente lo siguiente para convertir:

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

El error indica que el JSON es un JSON Object y no un JSON Array:

cambio:

JSONArray Jarray = new JSONArray(result) 

a

JSONObject someObject = new JSONObject(result); 
JSONArray Jarray = Jarray.getJSONArray("contacts"); 
+0

podría resolver este http: // stackoverflow.com/preguntas/12739824/imagen-espectador-conseguir-imagen-de-url-que-ofrecen-image-ruta-como-JSON-string – kongkea

4

La url (http://api.androidhive.info/contacts/) devuelve un JSON objeto y no una matriz JSON ...

aquí:

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

Usted está asumiendo el resultado es una matriz JSON. Si lo hace como lo siguiente que va a funcionar:

JSONObject Jasonobject = new JSONObject(result); 
JSONArray Jarray = Jasonobject.getJSONArray("contacts"); 

for (int i = 0; i < Jarray.length(); i++) { ...} 
+0

podría resolver este http://stackoverflow.com/questions/12739824/image- espectador-conseguir-imagen-de-url-que-ofrecen-image-ruta-como-JSON-string – kongkea

3

intentar usar esta

JSONObject Jarray = new JSONObject(result); 

en lugar de

JSONArray Jarray = new JSONArray(result); 

y siguiente

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

y el bucle imagen

Descargar continúa desde URL

transferir la URL a este método en particular y se puede descargar la imagen a la 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; 
} 
+0

gracias por la respuesta anterior y esta respuesta – kongkea

+0

que son bienvenidos. Feliz Codificación –

+0

no le importa, si quiero que me ayudes una más – kongkea

0
 // 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); 


       } 
      } 
Cuestiones relacionadas