Android动态显示图像

时间:2012-12-01 06:10:42

标签: android image parsing

使用适配器将我的图像正确显示到我的imageView中,我遇到了很多麻烦。所以基本上我有一个JSON字符串,我正在解析它以获取每个图像的url。然后我想以列表视图的方式显示每个图像及其标题。

我发现这个代码在线,当只需要显示一个图像时它可以正常工作,但是当我必须动态地执行此操作时它不起作用。任何人都有一些关于如何让它工作的好建议?我附上了部分代码以供参考。

谢谢!!!

 //results => JSON string
 ArrayList<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();
 for(int i = 0; i < results.length(); i++){
 JSONObject c = results.getJSONObject(i);

// Storing each json item in variable
cover = c.getString(TAG_COVER);
String title = c.getString(TAG_TITLE);

try {

    URL urlS = new URL(cover);
    new MyDownloadTask().execute(urlS);

    }catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
// creating new HashMap
HashMap<String, Object> map = new HashMap<String, Object>(); 

// adding each child node to HashMap key => value
map.put(TAG_COVER, cover);
map.put(TAG_TITLE, title);
// adding HashList to ArrayList
resultList.add(map);
}
}
   } catch (JSONException e) {
e.printStackTrace();
  } 

/**
 * Updating parsed JSON data into ListView
 * */
ListAdapter adapter = new SimpleAdapter(this, resultList,
        R.layout.list_item,
        new String[] {TAG_TITLE}, new int[] {
        R.id.title});

setListAdapter(adapter);

以下是我找到的图片下载代码:

private class MyDownloadTask extends AsyncTask<URL, Integer, Bitmap> {
    @Override
    protected Bitmap doInBackground(URL... params) {
        URL url = params[0];
        Bitmap bitmap = null;
        try {
            URLConnection connection = url.openConnection();
            connection.connect();
            InputStream is = connection.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bitmap = BitmapFactory.decodeStream(bis);
            bis.close();
            //is.close(); THIS IS THE BROKEN LINE
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        return bitmap;
    }


    protected void onPostExecute(Bitmap bitmap) {
        if (bitmap != null) {
            ImageView myImage = (ImageView) findViewById(R.id.list_image);
            myImage.setImageBitmap(bitmap);
        } else {
            Toast.makeText(getApplicationContext(), "Failed to Download Image", Toast.LENGTH_LONG).show();
        }

    }       
}

1 个答案:

答案 0 :(得分:1)

有很好的库调用AQuery。你可以使用它并通过只写2行代码来简单地获取所有这些东西,而且它会为你缓存所有图像,特别是如果你在ListView中使用它们

AQuery aq = new AQuery(activity);
aq.id(R.id.image).image(url, false, true);

另外我认为使用CustomAdapter会更好。我不确定使用SimpleAdapter来处理这种情况是可能的。 希望这会对你有所帮助。