单个textview android中的多行数据

时间:2017-10-21 05:51:22

标签: android mysql json

这是我多次尝试使用json在单个文本视图中获取多行值的代码。

protected Void doInBackground(Void... arg0)
        {

            HttpClient myClient = new DefaultHttpClient();
            HttpPost myConnection = new HttpPost("http://192.168.1.5/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);

               for( int i=0;  i <jArray.length(); i++) {
                   json = jArray.getJSONObject(i);

               }


            } 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("survey_textresponse"));

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

            //Hiding progress bar after done loading TextView.
            progressbar.setVisibility(View.GONE);

        }
    }


}

当我直接在chrome中运行php文件时,它会显示数据库中的所有值,而在Android应用程序中它只显示第一行值。

3 个答案:

答案 0 :(得分:2)

因为您只在[{1}}参考

中存储JSONobject的最后一个值
json

可以有很多解决方案

  • 将数据收集为值列表

  • 收集String或StringBuilder对象

// assume JArray length = 5
for( int i=0;  i <jArray.length(); i++) {
    json = jArray.getJSONObject(i); 
    // only have last object value , in last iteration jArray.getJSONObject(4)
}

以后

StringBuilder sb = new StringBuilder();
// or List<String> list = new ArrayList<>();

for( int i=0;  i <jArray.length(); i++) {
    json = jArray.getJSONObject(i);
    sb.append(json.optString("survey_textresponse")+"\n");
    // or list.add(json.optString("survey_textresponse"));
}

答案 1 :(得分:1)

json变量在完成时仅包含JsonArray的最后一个元素。您可以在从JsonArray检索值时在TextView上显示。

for( int i=0;  i <jArray.length(); i++) {
      json = jArray.getJSONObject(i);
      textview.setText(textview.getText() + json.getString("survey_textresponse") + "\n");
}

答案 2 :(得分:1)

您为从JSONArray中检索值而编写的循环不正确。它只在迭代循环时存储最后一个对象。您可以将检索到的值存储在字符串集合中。 以下是您可以遵循的示例代码:

private class RetrieveTask extends AsyncTask<Void,Void,Void>{
    List<String> jsonResults;
    String str;
    JSONObject json;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        jsonResults=new ArrayList<>();
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        for(String data:jsonResults)
            textview.append(data);
    }

    @Override
    protected Void doInBackground(Void... voids) {
        HttpClient myClient = new DefaultHttpClient();
        HttpPost myConnection = new HttpPost("http://192.168.1.5/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);

            for( int i=0;  i <jArray.length(); i++) {
                json = jArray.getJSONObject(i);
                if(json.optString("survey_textresponse")!=null){
                    jsonResults.add(json.getString("survey_textresponse"));
                }
            }


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

        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}