我的应用程序收到一个jsonArray,其中有类别的名称和它们的图像url。所以我想提取名称并通过它们的url下载图像。实际上,我成功地提取了名称和url,看看下面的代码:
private class ReadPlacesFeedTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result) {
try {
JSONObject jsonobject = new JSONObject(result);
JSONArray categories = new JSONArray(
jsonobject.getString("categories"));
for (int i = 0; i < categories.length(); i++) {
JSONObject category = categories.getJSONObject(i);
names.add(category.getString("name"));
images.add(category.getString("image"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getBaseContext(), R.layout.row_channel_layout,
R.id.channel_name, names);
channel_list = (ListView) findViewById(R.id.channel_list);
channel_list.setAdapter(adapter);
}
}
我的问题:1. 是否可以在onPostExecute方法中构建适配器?2.我是否应该编写另一个同步类来下载图像?,或者在doInbackground方法中提取url,然后下载图像,并将图像和名称返回给onPostExecute方法。实际上,我尝试这个,我认为这是非常慢的,因为在后台方法解码json是非常慢的!3.我怎么能在下载名称后建立listView,然后下载图像后,我只是修改它。谢谢你
1:通常是,虽然你最好让适配器,然后传递值给它在post执行,然后调用adapter. notifydatasetchanged ();
2:我建议不要重新发明轮子,使用"fantastic" picasso图像加载库
http://square.github.io/picasso/
3:创建一个listview,传递名称和url给它,使数组适配器成为你自己的自定义。"myListAdapter",然后设置name的值,然后使用picasso下载并加载图像到你的imageview或其他你想对它做的事情。
http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown_custom
。
public class MainActivity extends Activity
{
ArrayList<String> myListItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
adapter = new ArrayAdapter(this,R.layout.row_category_layout,R.id.category_name, names);
//execute my data task
}
public void dataTask()
{
//GOT SOME DATA
myListItems.add("MYDATA");
adapter.notifyDataSetChanged();
}