我必须开发一个包含按钮的小部件(AppWidget)。当按下按钮时,http 请求完成,如果请求成功,小部件通过 Toast 通知事实。由于http请求可以锁定UI,所以我在一个线程中运行它。一切正常(我可以在我的日志中看到“好吧”),除了 Toast 通知。我究竟做错了什么?
在 AppWidgetProvider 子类中:
@Override
public void onReceive(Context c, Intent intent){
super.onReceive(c, intent);
if(intent.getAction().equals(CLICK_ACTION)){
performRequest(c);
}
}
(我认为这个问题不需要 onUpdate 方法)
private void performRequest(final Context c){
new Thread(new Runnable(){
public void run() {
try {
if(Http.get(URL).contains(SUCCESS)){
Toast.makeText(c, "All right", Toast.LENGTH_SHORT).show();
Log.i("Widget","All right");
}
} catch (Exception e) {
e.printStackTrace();
}}}).start();
}
我认为问题出在 的Context
参数上performRequest
,但如果我删除final
关键字,就会出错。
谢谢指教。
[编辑]
我以这种方式“解决”了这个问题:
-我声明Toast t
为全局变量;
- 在 onReceive 方法中,我用它初始化它Toast.makeText(Context,String,int)
- 当我需要展示它时,我只需调用t.show()
我希望有更好的解决方案。