【问题标题】:Android - Populate list with AsycTaskLoader & MySqlAndroid - 使用 AsycTaskLoader 和 MySql 填充列表
【发布时间】:2012-09-19 11:15:15
【问题描述】:

我想用从 MySql 数据库加载的某些对象填充 ListFragment。

它必须从我的 ResultSet 中加载前 10 个“对象”。 我想为此使用 AsyncTaskLoader,并在每次从数据库中检索加载的对象时将其放入 ListItem 中。

有人可以帮我解决这个问题吗?尝试搜索好的示例或教程,但我还没有真正找到真正有用的东西......

【问题讨论】:

    标签: android mysql android-listview android-asynctask android-loadermanager


    【解决方案1】:

    在您的预执行方法中使用新列表创建您的适配器。将该适配器设置为您的列表视图。

    然后在 doInBackground 中读取您的数据库,创建适合您列表的对象,但不要添加它们。将每个对象作为参数传递给您的 publishprogress 方法。

    在 onProgressUpdate 中将您的对象添加到列表中并通知您的适配器数据集已更改。

    以下是我如何阅读 Twitter 电话的示例。

    private class parseTwitterTask extends AsyncTask<Void, TCListObject2, List<TCListObject2>> {
        TCListObjectAdapter2 adapter;
        List<TCListObject2> list;
    
        @Override
        protected void onPreExecute() {
            list = new ArrayList<TCListObject2>();
            ListView lv = (ListView)findViewById(R.id.twitterlist);
            adapter = new TCListObjectAdapter2(list);
            lv.setAdapter(adapter);
            super.onPreExecute();
        }
    
        @Override
        protected List<TCListObject2> doInBackground(Void... params) {
            try {
                String url = social.get("twittersearchurl");//"http://search.twitter.com/search.json?q=" + social.get("twitter");
                String json = Internet.request(url, null);
                JSONObject jo = new JSONObject(json);
                if(jo.has("results")) {                 
                    JSONArray ar = jo.getJSONArray("results");
                    for(int i = 0; i < ar.length(); i++) {
                        TCListObject2 tweet = new TCListObject2();
                        JSONObject jobj = (JSONObject) ar.get(i);
                        tweet.id = "false";
                        tweet.img = jobj.getString("profile_image_url");
    
                        String text = jobj.getString("text");
                        text = Html.fromHtml(text).toString();
                        tweet.params.put(R.id.sub2, text);
    
                        String name = jobj.getString("from_user");
                        name = Html.fromHtml(name).toString();
                        tweet.params.put(R.id.text, name);
    
                        String time = jobj.getString("created_at");
                        tweet.params.put(R.id.sub1, Converter.timeToTimeAgo(time));
    
                        try {
                            tweet.time = new Date(time);
                        } catch(Exception e) {
                            e.printStackTrace();
                        }
    
                        tweet.celLayout = R.layout.cell_tweetobject;
                        publishProgress(tweet);
                    }
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
    
            return list;
        }
    
        @Override
        protected void onProgressUpdate(TCListObject2... values) {
            list.add(values[0]);
            adapter.notifyDataSetChanged();
            super.onProgressUpdate(values);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2018-03-12
      • 2015-08-13
      • 2013-09-21
      相关资源
      最近更新 更多