Java Android小部件异步任务
我有一个android应用程序和小部件,它应该解析一些rss并获取一些数据。 以下是我的onReceive方法:Java Android小部件异步任务,java,android,android-asynctask,android-widget,Java,Android,Android Asynctask,Android Widget,我有一个android应用程序和小部件,它应该解析一些rss并获取一些数据。 以下是我的onReceive方法: @Override public void onReceive(Context context, Intent intent) { super.onReceive(context,intent); if (intent.getAction().equals(ACTION_TOAST)) { new
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context,intent);
if (intent.getAction().equals(ACTION_TOAST)) {
new RetrieveTask().execute(context);
}
}
和异步方法本身:
class RetrieveTask extends AsyncTask<Context,Void, List<String>> {
private Exception exception;
private Context context;
private RemoteViews views;
@Override
protected List<String> doInBackground(Context... params) {
List<String> output = new ArrayList<String>();
try {
int k = 15;
doc = Jsoup.connect("http://vlg-media.ru/transport").get();
String img = "";
int i = 0;
Title = doc.select(".art_img");
for (Element titles : Title) {
String IMG = URL;
String HREF;
//Element Img = titles.select(".art_image").first();
IMG = "http://vlg-media.ru" + titles.select("img").attr("src").toString();
IMG = IMG.replace("small", "medium");
HREF = "http://vlg-media.ru" + titles.select("a").attr("href").toString();
// Element Title = titles.select(".con_titlelink").first();
String title = titles.select("img").attr("alt").toString();
m = new HashMap<String, Object>();
m.put(ATTRIBUTE_NAME_TITLE, title);
//добавление данных в наш контейнер
data.add(m);
publishProgress();
i++;
//}
if (i == k)
break;
}
//}
} catch (Exception ex) {
this.exception = ex;
return null;
}
return output;
}
protected void onPostExecute(List<String> output) {
//to make sure it run
Toast.makeText(context,"Done",Toast.LENGTH_LONG).show();
}
}
类检索任务扩展了异步任务{
私人例外;
私人语境;
私人远程视图;
@凌驾
受保护列表doInBackground(上下文…参数){
列表输出=新的ArrayList();
试一试{
int k=15;
doc=Jsoup.connect(“http://vlg-media.ru/transport).get();
字符串img=“”;
int i=0;
标题=文件选择(“.art_img”);
用于(元素标题:标题){
字符串IMG=URL;
字符串HREF;
//元素Img=标题。选择(“.art_image”).first();
IMG=”http://vlg-media.ru“+titles.select(“img”).attr(“src”).toString();
IMG=IMG.替换(“小型”、“中型”);
HREF=”http://vlg-media.ru“+titles.select(“a”).attr(“href”).toString();
//元素标题=标题。选择(“.con_titlelink”).first();
字符串title=titles.select(“img”).attr(“alt”).toString();
m=新的HashMap();
m、 put(属性、名称、标题);
//добавление данных в наш контейнер
数据。添加(m);
出版进度();
i++;
//}
如果(i==k)
打破
}
//}
}捕获(例外情况除外){
this.exception=ex;
返回null;
}
返回输出;
}
受保护的void onPostExecute(列表输出){
//确保它运行
Toast.makeText(上下文“完成”,Toast.LENGTH_LONG.show();
}
}
做了这些事后,背景什么也没发生。onPostExecute从不运行。
我只需要在AppWidgetProvider中运行异步解析器。不知道问题出在哪里。您从未分配
上下文对象。在你的情况下是公正的
context = params[0];
作为doInBackground
的第一行,我真的需要它吗?我不确定。这是doInBackground从不运行的原因吗?您说过,onPostExecute
从不运行。在onPostExecute
中添加@Override
会发生什么情况?