当我启动我的活动时,我放了这段代码:
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,则提醒用户注意新事件。 每次启动应用程序时重复它。
答案 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)
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));