如何更新依赖于AsyncTask的小部件

时间:2015-02-20 06:13:20

标签: android android-asynctask android-widget

我正在创建一个需要建立网络连接以更新其信息的小部件。

我几乎都在使用适用于Widgets的Android Studio样板模板,其onUpdate方法附带了这个:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
    }
}

其中updateAppWidget是静态函数。

问题是,我正在利用AsyncTask建立网络连接,检索一些数据并更新小部件的价值:

private class APIQuery extends AsyncTask<Connection, Integer, String> {

    @Override
    protected String doInBackground(Connection... params) {
     // ...
    }
}

问题出在updateAppWidget内,因为如果我尝试在APIQuery内实例化updateAppWidget,Android Studio会说我无法从静态方法调用非静态方法。

基于这个答案:

calling non-static method in static method in Java

调用非静态方法的唯一方法是实例化类,但如果我实例化APIQuery,那么Android说我必须使updateAppWidget非静态,或APIQuery静态。

解决这种情况的正确方法是什么?我是Java和Android开发的新手,在我学习的过程中学习。

1 个答案:

答案 0 :(得分:0)

您可以尝试从异步任务的onPostExecute方法更新窗口小部件,也可以使用广播接收器向托管活动发送信号以更新窗口小部件