1

我正在登录银行帐户并获取帐户余额。我从小部件中的 onUpdate 调用此函数并在 AsyncTask 中运行

package com.example.oobe.widget.widgetexample;
public class ExampleAppWidgetProvider extends AppWidgetProvider 
{
    (...)

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]  appWidgetIds) 
    {
        (...)
        if (notFromAsyncTask)
            new MyAsyncTask().execute(context);
        (...)
    }
    (...)
}

在 onPostExecute 方法中,我想调用 onUpdate 小部件和 putExtra 字符串。我怎样才能做到这一点?

package com.example.oobe.widget.widgetexample;
public class MyAsyncTask extends AsyncTask<Object, Void, BGZ> 
{
    Context context;

    @Override
    protected BGZ doInBackground(Object... params) 
    {
        this.context = (Context)params[0];
        return GetSomething();
    }

    protected void onPostExecute(BGZ page)
    {
        Intent intent = new Intent(context, ExampleAppWidgetProvider.class);
        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        intent.putExtra("result", result);
        intent.putExtra("webpage", webPage);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
    (...)
}

如果我像上面那样做,我会收到错误:..无法找到明确的活动类..

我可以从 AsyncTask 执行此操作吗?我可以使用参数调用 widget_update (onUpdate) 来识别来自我的 AsyncTask 吗?请给我一些示例代码(如果必须是广播接收器等要添加到清单中的内容)。

我在 onPostExecute 中更新了小部件,但我认为更好的方法是在 ExampleAppWidgetProvider 类中执行此操作?

4

1 回答 1

0

如果您收到此错误

找不到明确的活动类..

可能是因为这条线

Intent intent = new Intent(context, ExampleAppWidgetProvider.class); 

确保 ExampleAppWidgetProvider.class 存在并且

Context context = Activity.this;

或者

Intent intent = new Intent(Activity.this, ExampleAppWidgetProvider.class); 

更新

public class ExampleAppWidgetProvider extends AppWidgetProvider 
{

   //your code .......
//asynctask as an inner class
   public class MyAsyncTask extends AsyncTask<Object, Void, BGZ> 
{
  doInBackground(){}
onPreExecute(){}
onPostExecute(){

//save result 
// or call your methods you need to run after your async call
}
}

}
于 2012-08-21T17:47:25.920 回答