【问题标题】:how to display all JSON values in android如何在android中显示所有JSON值
【发布时间】:2016-12-20 07:38:00
【问题描述】:

我正在学习这个教程http://www.android-examples.com/android-json-parsing-retrieve-from-url-and-set-mysql-db-data/

它运行完美,但现在我想在文本视图中显示所有 JSON 值。我是 JSON 新手,只有一点 android 经验。

这是我的 MainActivity.java。我从教程中修改了一点

public class MainActivity extends Activity {

TextView textview;
JSONObject json = null;
String str = "";
HttpResponse response;
Context context;
ProgressBar progressbar;
Button button;
JSONArray jArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressbar = (ProgressBar)findViewById(R.id.progressBar1);
    textview = (TextView)findViewById(R.id.textView1);
    button = (Button)findViewById(R.id.button1);

    progressbar.setVisibility(View.GONE);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            progressbar.setVisibility(View.VISIBLE);

            new GetTextViewData(context).execute();

        }
    });
}

public static Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
    Iterator<String> keys = json.keys();
    while(keys.hasNext()){
        String key = keys.next();
        String val = null;
        try{
            JSONObject value = json.getJSONObject(key);
            parse(value,out);
        }catch(Exception e){
            val = json.getString(key);
        }

        if(val != null){
            out.put(key,val);
        }
    }
    return out;
}

private class GetTextViewData extends AsyncTask<Void, Void, Void>
{
    public Context context;

    public GetTextViewData(Context context)
    {
        this.context = context;
    }

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

    @Override
    protected Void doInBackground(Void... arg0)
    {

        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php");

        try {
            response = myClient.execute(myConnection);
            str = EntityUtils.toString(response.getEntity(), "UTF-8");

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try{
            JSONArray jArray = new JSONArray(str);
            json = jArray.getJSONObject(0);

        } catch ( JSONException e) {
            e.printStackTrace();
        }

        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(Void result)
    {

     try {
           textview.setText(json.getString("name"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        progressbar.setVisibility(View.GONE);

    }
}

这是我的 JSON。和教程有很大的不同

[{"id":"1","name":"white","status":"0"},{"id":"2","name":"red","status" :"10"},{"id":"5","name":"blue","status":"15"}]

很明显我的代码只显示名字“white”。我不明白如何迭代 JSONObject 以显示所有值。我尝试了其他问题的答案,但无法将它们完全合并到我的代码中。

【问题讨论】:

    标签: java php android mysql json


    【解决方案1】:

    您的代码的问题是 Alok Patel 所说的。但是我看到您的代码逻辑需要进行一些更改才能执行您想要的操作(根据您发布的示例 json)。您在实际上是简单数据的值上调用了 parse 方法,而您应该在 jsonObjects 上调用它。

    我重构了您的代码,如下所示:

    public class MainActivity extends Activity {
    
    TextView textview;
    JSONObject json = null;
    String str = "";
    HttpResponse response;
    Context context;
    ProgressBar progressbar;
    Button button;
    JSONArray jArray;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        progressbar = (ProgressBar)findViewById(R.id.progressBar1);
        textview = (TextView)findViewById(R.id.textView1);
        button = (Button)findViewById(R.id.button1);
    
        progressbar.setVisibility(View.GONE);
    
        button.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
    
                progressbar.setVisibility(View.VISIBLE);
    
                new GetTextViewData(context).execute();
    
            }
        });
    }
    
    
    
    private class GetTextViewData extends AsyncTask<Void, Void, Void>
    {
        public Context context;
        Map<String,String> out = new Map<String, String>();
    
        public GetTextViewData(Context context)
        {
            this.context = context;
        }
    
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
        }
    
        @Override
        protected Void doInBackground(Void... arg0)
        {
    
            HttpClient myClient = new DefaultHttpClient();
            HttpPost myConnection = new HttpPost("http://192.168.1.9:80/test-androidex/send-data.php");
    
            try {
                response = myClient.execute(myConnection);
                str = EntityUtils.toString(response.getEntity(), "UTF-8");
    
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
            try{
                JSONArray jArray = new JSONArray(str);
                int total=jArray.length();
    
                for(int i=0;i<total;i++) {
                     JSONObject json = jArray.getJSONObject(i); 
                     parse(json, out);
                }
    
            } catch ( JSONException e) {
                e.printStackTrace();
            }
    
            catch (Exception e)
            {
    
                e.printStackTrace();
            }
            return null;
        }
        protected void onPostExecute(Void result)
        {
    
         try {
             // print "out" object to console here by iterating over its keys 
             // or do any needed process on it here.
               textview.setText(json.getString("name"));
    
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            progressbar.setVisibility(View.GONE);
    
        }
    Map<String,String> parse(JSONObject json , Map<String,String> out) throws JSONException{
        Iterator<String> keys = json.keys();
        while(keys.hasNext()){
            String key = keys.next();
            String val = null;
            try{
                val = json.getString(key);
            }catch(Exception e){
    
            }
    
            if(val != null){
                out.put(key,val);
            }
        }
        return out;
     }
    }
    

    【讨论】:

      【解决方案2】:

      Here 的 json 解析和插入、更新、删除或从服务器获取数据的示例,你应该试试这个!

      编码愉快!

      【讨论】:

        【解决方案3】:

        那是因为您刚刚从JSONArray 获取第一个元素。 (索引 0)

        您应该遍历 JSONArray 以获取数组中的所有 JSONObject

        像这样,

        JSONArray jArray = new JSONArray(str);
        int total=jArray.length();
        for(int i=0;i<total;i++) {
            JSONObject json = jArray.getJSONObject(i); // Replace 0 with i'th index.
           // use this json object to iterate over individual objects.
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多