Android:将列表数组转换为字符串数组什么都不显示

时间:2014-07-29 07:13:42

标签: java android arrays json

我正在尝试从URL获取数据并将其转换为字符串数组,但是当我尝试在TextView上显示它时,它什么也没显示。我使用的链接和itemId已经是正确的。

logcat上没有错误警告。

我无法弄明白为什么。 有没有人可以帮助我?

这是我的json数据

[{"image":"http://cdn-data.apps.com/category_item/05d92b217f916c9b9d87ab9121662d87.jpg"},
{"image":"http://cdn-data.apps.com/category_item/0424ef5a980255ff989fe5b20eaa5dcd.jpg"},
{"image":"http://cdn-data.apps.com/category_item/02b5bce4a9ca8fa3e53ceea2c7e273ff.jpg"},
{"image":"http://cdn-data.apps.com/category_item/dd15419113c091c93eafb3695eb65153.jpg"},
{"image":"http://cdn-data.apps.com/category_item/1ddfd2d7a489678e3c66e7f012ceb951.jpg"}]

这是我的Java代码

    if(in.getStringExtra("TAG_IMAGE_COUNT").equals("0")) {
        ViewPager imagePager = (ViewPager) findViewById(R.id.viewPagerGallery);
        imagePager.setVisibility(View.GONE);
        CirclePageIndicator imageIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
        imageIndicator.setVisibility(View.GONE);
    }
    else {
        ViewPager imagePager = (ViewPager) findViewById(R.id.viewPagerGallery);
        imagePager.setVisibility(View.VISIBLE);
        CirclePageIndicator imageIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
        imageIndicator.setVisibility(View.VISIBLE);

        try {

            DefaultHttpClient defaultClient = new DefaultHttpClient();
            HttpGet httpGetRequest = new HttpGet("http://api.apps.com/category_item/get_image/" + itemId);
            HttpResponse httpResponse = defaultClient.execute(httpGetRequest);

            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"UTF-8"));

            String json = reader.readLine();

            //JSONObject jsonObject = new JSONObject(json);
            JSONArray arr = new JSONArray(httpResponse);
            List<String> list = new ArrayList<String>();
            for(int i = 0; i < arr.length(); i++){
                list.add(arr.getJSONObject(i).getString("image"));
            }
            String[] stringArr = list.toArray(new String[list.size()]);

            TextView array = (TextView)findViewById(R.id.testarray);

            array.setText(Arrays.toString(stringArr));
            Log.d("", json);

            //Toast.makeText(getApplicationContext(), json, Toast.LENGTH_SHORT).show();

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

我尝试在testarray上展示它,但它没有显示。

1 个答案:

答案 0 :(得分:0)

首先,你必须解析一个String而不是Httpresponse:

在这里:

 HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
 JSONArray arr = new JSONArray(httpResponse);

稍微改变一下:

 HttpResponse httpResponse = defaultClient.execute(httpGetRequest);

        BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"UTF-8"));
        String returnValues = "";

        while((returnValues = reader .readLine()) != null){
          JSONArray arr = new JSONArray(returnValues);

        //Define this list globally ,so you can use it any where of this class after adding data
        List<String> list = new ArrayList<String>();

        for(int i = 0; i < arr.length(); i++){
            list.add(arr.getJSONObject(i).getString("image"));
        }
      }

最后在textView中根据需要设置列表数据。 你不应该在后台线程中使用任何UI线程视图(例如button,textview,edittext ..)。

编辑:

private class GetImages extends AsyncTask<String, Integer, ArrayList<String>>{
   ArrayList<String> list = new ArrayList<String>();
    @Override
    protected ArrayList<String> doInBackground(String... params) {
        try {

        HttpClient defaultClient = new DefaultHttpClient();
        HttpGet httpGetRequest = new HttpGet("http://api.apps.com/category_item/get_image/" + itemId);
        HttpResponse httpResponse = defaultClient.execute(httpGetRequest);

        BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
        String returnValues = "";

        while((returnValues = reader .readLine()) != null){
          JSONArray arr = new JSONArray(returnValues);

        //Define this list globally ,so you can use it any where of this class after adding data           
        for(int i = 0; i < arr.length(); i++){
            list.add(arr.getJSONObject(i).getString("image"));
        }
      }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        return list;
  }

    @Override
    protected void onPostExecute(ArrayList<String> result) {
        //use this result and put in your textView
    }
}