gpt4 book ai didi

java - SharedPreferences 问题 - 丢失上次保存的值

转载 作者:行者123 更新时间:2023-11-29 19:12:43 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我的应用程序从用户输入中收集一些数据并将其保存在 SQLite 数据库中。我还有一个持续运行的服务(START_STICKY),每 30 分钟通过查看 SQLite 数据库检查用户的新更新。如果添加了新记录,则会使用 AsyncTask 将其发送到我的服务器以上传数据。为了跟踪已经上传了哪些记录,我在我的 SharedPreferences 上存储了一个 int 值。因此,这从 0 值开始,在每次上传时,我都会在我的 SQLite 数据库中获取最后一个索引,并将其保存在我的 SharedPreferences 中。如果在启动应用程序后我向我的服务器发送了 10 条记录,我将在 SharedPreferences 上保存“10”并且在下一次更新(30 分钟后)我将选择索引大于 10 的所有记录。

一切正常,但有时 Android 会终止我的服务,可能是为了内存优化,然后服务重新启动 (START_STICKY),应用程序继续工作。仅在这种情况下,有时我会丢失 SharedPreferences 上最后保存的值,并且由于我使用此值作为引用来选择新记录并将其上传到我的服务器,因此我的应用程序会在发生这种情况时发送重复信息...我将我在 SharedPreferences 上保存 int 值的方式从“apply()”方法更改为“commit()”,因为最后一个方法将信息直接保存在文件中,但问题没有解决。

欢迎提出任何关于如何处理此问题或其他方法的想法。

我的 SharedPreferences 类如下所示:

public class MySharedPreferences {
private SharedPreferences sharedPref;

public MySharedPreferences(Context context) {
sharedPref = context.getSharedPreferences("com.mypackage", Context.MODE_PRIVATE);
}

public void setIndex(int n) {
//sharedPref.edit().putInt("index", n).apply();
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("index", n);
editor.commit();
}

public int getIndex() {
return sharedPref.getInt("index", 0);
}
}

我的 SharedPreferences 对象在服务 onCreate 方法上被实例化:

MySharedPreferences mySharedPref = new MySharedPreferences(context);

这是在我的服务中运行的 AsyncTask 示例:

private class UpdateData extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... strings) {
try {
String response = utils.postDataHttps("https://my_url.com", params);
if (response.equals("OK")) {
// Access SQLite DB and select last index
// by using this query: SELECT id FROM my_table ORDER BY id DESC LIMIT 1;
int lastIndex = myDb.getLastIndex();
// Set last index on SharedPreferences:
mySharedPref.setIndex(lastIndex);
}
} catch (Exception e) {
Log.e(LOG_TAG, "UpdateData.doInBackground() - Exception: " + e.getMessage() + "\n" + Log.getStackTraceString(e));
}
return null;
}
}

提前致谢!

最佳答案

你确定你没有在 ondestroy 之后清理你的 sharedpreference 数据吗?

已更新尝试使用应用程序的上下文而不是 Activity 的上下文。

关于java - SharedPreferences 问题 - 丢失上次保存的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44727449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com