通过方法调用增加变量值



我正在构建一个简单的小部件来每天显示一个数字。我初始化了一个名为 Counter 的类及其 getter 和 setter,并使用它们来增加值。但是,每次调用onUpdate()方法(30 分钟后,小部件更新)时,变量都会重置为 1。

public class WidgetProvider extends AppWidgetProvider {
Counter counter = new Counter();
//Create class counter in order to store global variable
//Constructor makes the counter value = 1
int k;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
k=counter.getI();
// k now equals to 1 
Toast.makeText(context, "Widget has been updated! ", Toast.LENGTH_SHORT).show();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setCharSequence(R.id.button, "setText",""+k); //1
counter.increase(counter.getI());
//Log shows counter value = 2
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}

你能帮我解决这个问题或建议另一种方法吗? :(非常感谢你们。

您永远不应该期望 AppWidgetProvider 中的实例变量是持久性的。很可能您的 AppWidgetProvider 在更新后被销毁,并将在下次需要更新时重新创建。发生这种情况时,你将获得值为 1 的计数器的新副本。

如果您希望在小部件更新之间记住某个值,则应将该值存储在持久存储中,例如共享首选项。

https://developer.android.com/reference/android/content/SharedPreferences.html

最新更新