如何在TextView中显示我的List大小的增加

时间:2016-12-06 11:13:27

标签: android list

当我启动我的活动时,我放了这段代码:

     size = getSize();
     readRSSEvent(str);
     if(getSize()-size>0){
         events.setText(""+(getSize()-size));
     }

    public void readRSSEvent(final String s) {
            Thread thread = new Thread(new Runnable() {

                @Override
                public void run() {
                    try {
                        url_ = new URL(s);
                        feed_ = RssReader.read(url_);
                        rssItems_ = feed_.getRssItems();
                        for (RssItem rssItem : rssItems_) {
                            item_ = new Item(rssItem.getTitle(), rssItem.getDescription(),
                                    rssItem.getPubDate());
                            list2.add(item_);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    size = list2.size();
                    SharedUtilities.getInstance().saveItem2(list2, getApplicationContext());
                }
            });
            thread.start();
        }

public int getSize(){
        return this.size;
    }

但是IF中的代码永远不会起作用,因为getSize-size总是返回0。 我的目标是查找feed并将它们插入List中,保存列表的大小,如果我的int size之间的差异大于0,则提醒用户注意新事件。 每次启动应用程序时重复它。

2 个答案:

答案 0 :(得分:0)

将其称为.... new DownloadFilesTask(str).execute();

 private class DownloadFilesTask extends AsyncTask<Void, Void,Integer>{
String mURL;
public DownloadFilesTask(String url){
this.mURL = url;
}
     protected Integer doInBackground(Void... vo) {
                    url_ = new URL(mURL);
                    feed_ = RssReader.read(url_);
                    rssItems_ = feed_.getRssItems();
                    for (RssItem rssItem : rssItems_) {
                        item_ = new Item(rssItem.getTitle(),                rssItem.getDescription(),
                                rssItem.getPubDate());
                        list2.add(item_);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                size = list2.size();
     return size;
 }
 protected void onPostExecute(Integer size) {
          if(getSize()-size>0){
     events.setText(""+(getSize()-size));
    }
 }

}

答案 1 :(得分:0)

根据Android documentation

  

AsyncTask可以正确,轻松地使用UI线程。此类允许您执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。

Android code中使用线程被认为是不好的做法:

  

[线程]类和方法也会使您的代码更复杂,更难以阅读。当你的工具复杂的操作需要频繁的UI更新时,它会变得更糟糕

您应该使用AsyncTask:

而不是线程
    private class ReadRSSTask extends AsyncTask < URL, Integer, Integer > {
    protected Long doInBackground(URL...urls) {
        try {
            url_ = new URL(s);
            feed_ = RssReader.read(urls[0]);
            rssItems_ = feed_.getRssItems();
            for (RssItem rssItem: rssItems_) {
                item_ = new Item(rssItem.getTitle(), rssItem.getDescription(), rssItem.getPubDate());
                list2.add(item_);
            }
        } catch (Exception e) { //Pokemon exception handling!!!
            e.printStackTrace();
        }
        size = list2.size();
        SharedUtilities.getInstance().saveItem2(list2, getApplicationContext());
        return size;
    }

    protected void onPostExecute(Integer result) {
        if (result > 0) {
            events.setText(String.vaulueOf(result));
        }
    }
}

你可以用:

来称呼它
 new ReadRSSTask().execute(new URL(str));