共享首选项无法工作,安卓系统?

4
以下方法以前是有效的,但现在无法将我的整数写入文件。
public void writeChpNum(int num) {
    SharedPreferences prefs = context.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);
    prefs.edit().putInt("chapter", num).apply();
}

这是我从主类获取的方法:

SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);
chapterNum = prefs.getInt("chapter", 1);

这种情况下方法无法正常工作:

writeChpNum(1);
writeLastLine("0");

boolean deleted = file.delete();
boolean deleted2 = file2.delete();
boolean deleted3 = file3.delete();
boolean deleted4 = last.delete();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

在这里,我想重新启动一切并退出,所以我正在删除文件,但对于章节,我只需要写“1”-章节。然而,它没有写入。

这是因为我正在退出应用程序吗?


1
是的,它是正确的。为什么它不工作?请展示一些错误日志。 - Umar Hussain
共享首选项是应用程序的私有文件,不能在外部直接访问。 - Umar Hussain
@UmarHussain 是的,它是应用程序私有的,但这会对这种情况产生什么影响吗? - Michael
@IriskulTurduev 您可以在任意数量的类中使用该代码。我正在查看我的“SharedPreferences”代码,它看起来完全相同。我的代码毫无问题地运行。 - Michael
1
你确定它没有写入该值吗?问题不是你向方法传递了错误的值吗? - Juan
显示剩余6条评论
1个回答

1
当您像这样访问它时,在其他活动中将无法使用上下文对象。如果您想将此方法仅写入一个类,请在方法中也传递上下文。使方法静态,这样您就不需要创建活动对象。
编辑
根据您退出应用的新代码,您需要使用commit()而不是apply() 参考:https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()
public static void writeChpNum(Context c, int num) {
    SharedPreferences prefs = c.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);
    prefs.edit().putInt("chapter", num).commit() ;
}

我已经在同一个应用程序中完成了以下两个操作:getContext().getSharedPreferences("sample_name", MODE_PRIVATE);SharedPreferences sPrefs = getSharedPreferences("Sleepin", MODE_PRIVATE);,它们都可以正常工作。第一个是在适配器中,第二个是在自己的活动中。 - Michael
是的,这个方法是有效的,但是当我想要写入整数并退出应用程序时,它没有写入。代码如上所示。 - Yryskul Turduev
您正在退出应用程序,而同时调用了apply()方法,请使用commit()方法。Apply方法是异步工作的,因此在它在后台工作时,您调用了退出操作。commit()方法将在写入/失败数据完成后转到下一行代码。 - Umar Hussain
@UmarHussain 谢谢你,你救了我的命。我使用了 commit()。 - Yryskul Turduev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接