android - 从json、android下载图片

标签 android json image android-asynctask

我的应用程序收到一个 jsonArray,其中包含类别名称及其图像网址。 所以我想提取名称并通过它们的网址下载图像。 实际上我成功地提取了名称和 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.我应该写另一个 synctasck 类来下载图像吗?或者在 doInbackground 方法中提取 url,然后下载图像,并将图像和名称都返回给 onPostExecute 方法。 实际上我试过这个,我认为它很慢,因为在后台方法中解码 json 非常慢! 3.我怎么能在下载名称后构建listView,然后在下载图像后,我只是修改它。 谢谢你

最佳答案

1:通常是的,尽管您最好制作适配器,然后在执行后将值传递给它,然后调用 adapter.NotifyDataSetChanged();

2:我建议不要重新发明轮子,使用“神奇”的毕加索图像加载库

http://square.github.io/picasso/

3: 创建一个 ListView ,将名称和 url 传递给它,将数组适配器制作成您自己的自定义 e.g. “myListAdapter”,然后设置名称值,然后使用 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();

    }

关于android - 从json、android下载图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314640/

相关文章:

image - 如何在 MATLAB 中从视频中选择特定帧?

c++ - 在 OpenCV 中寻找轮廓?

android - 如何查看 Android API 代码

android - 在谷歌播放应用程序登录期间出现错误 "no key for alias"

c# - 这两种 JSON 格式有什么区别?

android - 解析 JSON 时出现 NullPointer 异常

java - AsyncTask doInBackground 中的 NetworkOnMainThreadException

java - Android Actionbar SearchView 与 item.getItemId() 不起作用

php - android 使用 json 连接 php/mysql 选择查询不起作用

php - 返回 php 文件中图像的内容?