我正在创建一个需要建立网络连接以更新其信息的小部件。
我几乎都在使用适用于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开发的新手,在我学习的过程中学习。
答案 0 :(得分:0)
您可以尝试从异步任务的onPostExecute方法更新窗口小部件,也可以使用广播接收器向托管活动发送信号以更新窗口小部件