Obtener datos JSON de URL con Android?

Estoy tratando de obtener datos JSON al analizar la URL de inicio de sesión con nombre de usuario y contraseña. Lo intenté usando el código siguiente, pero no puedo obtener ninguna respuesta. Por favor, ayúdame.

Estoy usando HTTP Process y API nivel 23.

Necesito analizar mi URL y obtener respuesta debajo

{ "response":{ "Team":"A", "Name":"Sonu", "Class":"First", }, "Result":"Good", } 

Debajo de mi código:

 public class LoginActivity extends Activity { JSONParser jsonparser = new JSONParser(); TextView tv; String ab; JSONObject jobj = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); new retrievedata().execute(); } class retrievedata extends AsyncTask{ @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub jobj = jsonparser.makeHttpRequest("http://myurlhere.com"); // check your log for json response Log.d("Login attempt", jobj.toString()); try { ab = jobj.getString("title"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ab; } protected void onPostExecute(String ab){ tv.setText(ab); } } } 

Una forma sencilla de obtener JSON especialmente para Android SDK 23 :

 public class MainActivity extends AppCompatActivity { Button btnHit; TextView txtJson; ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnHit = (Button) findViewById(R.id.btnHit); txtJson = (TextView) findViewById(R.id.tvJsonItem); btnHit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new JsonTask().execute("Url address here"); } }); } private class JsonTask extends AsyncTask { protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(MainActivity.this); pd.setMessage("Please wait"); pd.setCancelable(false); pd.show(); } protected String doInBackground(String... params) { HttpURLConnection connection = null; BufferedReader reader = null; try { URL url = new URL(params[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); InputStream stream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line+"\n"); Log.d("Response: ", "> " + line); //here u ll get whole response...... :-) } return buffer.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if (pd.isShowing()){ pd.dismiss(); } txtJson.setText(result); } } } 

Siento tu frustración.

Android está loco y fragmentado, y la gran cantidad de ejemplos diferentes en la web cuando se busca no ayuda.

Dicho esto, acabo de completar una muestra basada en parte en la muestra de mustafasevgi, construida en parte a partir de varias otras respuestas de stackoverflow. Trato de lograr esta funcionalidad, de la manera más simple posible, siento que está cerca de la meta.

(Tenga en cuenta que el código debe ser fácil de leer y ajustar, por lo que no se ajusta perfectamente a su objeto json, pero debe ser súper fácil de editar, para adaptarse a cualquier escenario)

 protected class yourDataTask extends AsyncTask { @Override protected JSONObject doInBackground(Void... params) { String str="http://your.domain.here/yourSubMethod"; URLConnection urlConn = null; BufferedReader bufferedReader = null; try { URL url = new URL(str); urlConn = url.openConnection(); bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); StringBuffer stringBuffer = new StringBuffer(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } return new JSONObject(stringBuffer.toString()); } catch(Exception ex) { Log.e("App", "yourDataTask", ex); return null; } finally { if(bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } } @Override protected void onPostExecute(JSONObject response) { if(response != null) { try { Log.e("App", "Success: " + response.getString("yourJsonElement") ); } catch (JSONException ex) { Log.e("App", "Failure", ex); } } } } 

Este sería el objeto json al que apunta.

 { "yourJsonElement":"Hi, I'm a string", "anotherElement":"Ohh, why didn't you pick me" } 

Está trabajando para mi fin, espero que esto sea útil para alguien más allá.

Si obtiene la respuesta del servidor como una Cadena, sin usar una biblioteca de terceros puede hacer

 JSONObject json = new JSONObject(response); JSONObject jsonResponse = json.getJSONObject("response"); String team = jsonResponse.getString("Team"); 

Aquí está la documentación

De lo contrario, para analizar json puede usar Gson o Jackson

EDITAR sin bibliotecas (no probado)

 class retrievedata extends AsyncTask{ @Override protected String doInBackground(Void... params) { HttpURLConnection urlConnection = null; BufferedReader reader = null; URL url; try { url = new URL("http://myurlhere.com"); urlConnection.setRequestMethod("GET"); //Your method here urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); StringBuffer buffer = new StringBuffer(); if (inputStream == null) { return null; } reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) buffer.append(line + "\n"); if (buffer.length() == 0) return null; return buffer.toString(); } catch (IOException e) { Log.e(TAG, "IO Exception", e); exception = e; return null; } finally { if (urlConnection != null) { urlConnection.disconnect(); } if (reader != null) { try { reader.close(); } catch (final IOException e) { exception = e; Log.e(TAG, "Error closing stream", e); } } } } @Override protected void onPostExecute(String response) { if(response != null) { JSONObject json = new JSONObject(response); JSONObject jsonResponse = json.getJSONObject("response"); String team = jsonResponse.getString("Team"); } } } 

Parece que algo está mal con tu cadena Json.

  1. Vaya a http://jsonlint.com/ y valide su JSON.

  2. Conozca los conceptos básicos de objetos y matrices JSON.

  3. Siga este enlace para analizar JSON. Es bastante detallado

Espero que esto ayude.

  BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); String sResponse; StringBuilder s = new StringBuilder(); while ((sResponse = reader.readLine()) != null) { s = s.append(sResponse); } Gson gson = new Gson(); JSONObject jsonObject = new JSONObject(s.toString()); String link = jsonObject.getString("Result"); 

Intenta usar GSON para analizar JSON, que es fácil de usar:

Guía del usuario de GSON: https://sites.google.com/site/gson/gson-user-guide

Descargar GSON: https://github.com/google/gson

Puede encontrar un ejemplo aquí:

http://primalpappachan.com/android/2010/06/05/parsing-json-in-android/