2015-02-16 3 views
-1

Я пытаюсь отобразить данные в текстовых изображениях, которые выведены из массива json.android json object string display in textview

я получить правильный ответ сервера и первый тост отображается правильно де JSON массив { "андроида": { "всего": 4}}

страница РНР онлайн http://www.2w.cl/apps/db/cargar_resultados.php

import java.util.ArrayList; 
import java.util.List; 

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.AsyncTask; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SeeResults extends Activity{ 

    TextView texto; 

    JSONArray android = null; 
    JSONParser jsonParser = new JSONParser(); 
    private static String url = "http://www.2w.cl/apps/db/cargar_resultados.php/"; 
    private static final String TAG_OS = "android"; 
    private static final String TAG_CONSULTA = "total"; 

    public String idconsulta; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.see_results); 
     idconsulta = getIntent().getStringExtra("test"); 

     TextView tv = null; 
     tv = (TextView)findViewById(R.id.textView1); 
     tv.setText(idconsulta); 

     Toast.makeText(this, "On Create Called" + idconsulta, Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     new JSONParse().execute(); 
     Toast.makeText(this, "On Start Called", Toast.LENGTH_LONG).show(); 
    } 


    private class JSONParse extends AsyncTask<String, String, JSONObject> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 
     @Override 
     protected JSONObject doInBackground(String... args) { 

      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("idconsultas", idconsulta)); 
      JSONObject json = jsonParser.makeHttpRequest(url, "POST", params); 

      return json; 
     } 

     @Override 
      protected void onPostExecute(JSONObject json) { 

      Toast.makeText(getBaseContext(), "test" + json, Toast.LENGTH_LONG).show(); 

      try { 
      android = json.getJSONArray(TAG_OS); 
      for(int i = 0; i < android.length(); i++){ 
      JSONObject c = android.getJSONObject(i); 

      String total = c.getString(TAG_CONSULTA); 
      Toast.makeText(getBaseContext(), "test2" + total, Toast.LENGTH_LONG).show(); 
      TextView tv = null; 
      tv = (TextView)findViewById(R.id.textView1); 
      tv.setText(total); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     } 
    } 


} 

тост «test2» ничего не отображает.

Спасибо за помощь

+0

post logcat (и прочитайте его, вы увидите, что он объясняет, что ваш ответ json не является массивом.) – njzk2

ответ

2

Response JSon строка является:

{ "андроида": { "всего": 4}}

где android является JSONObject вместо JSONArray так получить JSONObject от json JSONObject:

JSONObject android = json.getJSONObject(TAG_OS); 
String total = android.optString(TAG_CONSULTA); 
+0

i изменено как указано, но теперь я не могу использовать JSONObject c = android.getJSONObject (i); –

+0

@IngolfKrauss: см. Мой ответ, не нужно использовать для цикла и другого кода –

+0

спасибо alot отлично работает –

0
  1. Во время отладки, используйте "Log.d" вместо Тосты
  2. Я хотел бы избежать положить Тосты внутри цикла
  3. Это проверялось, но дать этот код выстрел:

    String result = "{\"android\":{\"total\":\"4\"}}"; 
    Log.d("something", "result: " + result); 
    try { 
        JSONObject hold = new JSONObject(result); 
        JSONObject obj = hold.getJSONObject("android"); 
        Log.d("something", "total: " + obj.getString("total")); 
    
    } catch (JSONException e) { 
        Log.d("something", "ERROR"); 
    } 
    
+0

oh и ваш номер 4 должен быть внутри двойных кавычек afaik –