此代码将仅从json字符串获取第一个值

时间:2017-03-28 12:01:23

标签: java android json

请帮助我从这里我需要显示json数组数据,但它只会显示json的第一个值.i试图更改值,但是一个值显示的不是数组

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnadd=(Button)findViewById(R.id.btnhit);
    tvdata = (TextView)findViewById(R.id.tvJsonitem);
    btnadd.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new JSONTask().execute("https://api.myjson.com/bins/106o37");
                }
            }
    );

}

公共类JSONTask扩展了AsyncTask {

    @Override
    protected String doInBackground(String... params) {
        HttpsURLConnection connection = null;
        BufferedReader reader = null;
        try {
            URL url = new URL(params[0]);
            connection = (HttpsURLConnection) 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);

            }

            String finalJson = buffer.toString();
            JSONArray jsonarray = new JSONArray(finalJson);

            StringBuffer finalBufferedData=new StringBuffer();
            for(int i=0; i<jsonarray.length(); i++){
                JSONObject obj = jsonarray.getJSONObject(i);
                String description = obj.getString("description");
                finalBufferedData.append(description + "\t\n"                             
                );
                return finalBufferedData.toString();
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

2 个答案:

答案 0 :(得分:-1)

您的退货声明应该在您的for循环之外。现在它在里面,所以方法返回第一个值。

答案 1 :(得分:-1)

使用此

  @Override
protected String doInBackground(String... params) {
    HttpsURLConnection connection = null;
    BufferedReader reader = null;
    try {
        URL url = new URL(params[0]);
        connection = (HttpsURLConnection) 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);

        }

        String finalJson = buffer.toString();
        JSONArray jsonarray = new JSONArray(finalJson);

        StringBuffer finalBufferedData=new StringBuffer();
        for(int i=0; i<jsonarray.length(); i++){
            JSONObject obj = jsonarray.getJSONObject(i);
            String description = obj.getString("description");
            finalBufferedData.append(description + "\t\n"                             
            );

        }

        return finalBufferedData.toString();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            connection.disconnect();
        }
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}