使用适配器将我的图像正确显示到我的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();
}
}
}
答案 0 :(得分:1)
有很好的库调用AQuery
。你可以使用它并通过只写2行代码来简单地获取所有这些东西,而且它会为你缓存所有图像,特别是如果你在ListView
中使用它们
AQuery aq = new AQuery(activity);
aq.id(R.id.image).image(url, false, true);
另外我认为使用CustomAdapter
会更好。我不确定使用SimpleAdapter
来处理这种情况是可能的。
希望这会对你有所帮助。