java - 通过方法调用增加变量值

标签 java android widget

我正在构建一个简单的小部件来每天显示一个数字。我初始化了一个名为 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 的 Counter 的新副本。

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

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

关于java - 通过方法调用增加变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708148/

相关文章:

android - Flutter Dart 在构建期间使用过多内存

flutter - 如何删除小部件 'Step' 的标题

Android AppwidgetProvider 从未调用过

java - Hibernate获取同一个对象到不同的对象

xml - XML格式中的换行符?

android - 我的应用程序即使在重启后仍保持登录状态

c++ - 实现自定义 Gtkmm 小部件 : what should I return in the virtual on_* functions?

java - 编写 JUnit 测试用例的最佳规则

java - 如何将环境变量传递给jar文件?

java - 方法中的继承程序错误