gpt4 book ai didi

java - Android 共享首选项 : String stored has different length than String retrieved?

转载 作者:行者123 更新时间:2023-12-01 11:23:08 24 4
gpt4 key购买 nike

我正在编写一些 Android 代码,将应用程序 EULA 作为字符串下载并将其存储在 SharedPreferences 中,以便我们稍后检查。一般的想法是,用户只需同意 EULA 一次,但如果条款更新,我们希望通知用户并让他们再次同意。

下面是一些示例代码,发生在 AsyncTask 的 doInBackground 方法中:

String currentEula = getEulaText(); //I've confirmed this method correctly downloads the text
String oldEula = mPrefs.getString("eula_text", "");
if(!(oldEula.equals(currentEula)){
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("eula_text", currentEula);
editor.commit();
runOnUiThread(new Runnable {
@Override
public void run() {
showEula() //this handles the actual agreement stuff, works correctly
}
}
}

但是,在此示例中,currentEula 和 oldEula 永远不会相等,因此每次我打开应用程序时,都会显示 EULA。当我打印两个字符串的长度时,我发现来自 mPrefs 的字符串比下载的字符串长 4 个字符。我添加了一条日志语句来打印 4 个额外的字符,但它们是空白的。如果我比较其余的字符串,它们是相等的。

更奇怪的是,在调用 editor.commit() 之后,这个比较是正确的:

mPrefs.getString("eula_text", "").equals(currentEula);

因此,从 mPrefs 检索到的字符串的值在该函数结束和再次调用它的时间之间发生变化,但我已经确认应用程序的任何其他部分都没有触及“eula_text”值(即使确实如此,为什么它只是在末尾添加四个空格?)。

从 mPrefs 检索字符串后,我可以从字符串中删除最后 4 个字符,但我担心它们可能并不总是空白。或者,我可以进行以下比较:

oldEula.substring(0, currentEula.length()).equals(currentEula)

但是,如果 EULA 更新只是删除最后一项(不太可能,但仍然有可能),这会产生误报。有谁知道为什么我的字符串会随机添加 4 个空白字符?

最佳答案

您可以存储当前 EULA + 当前 EULA 的哈希值。

然后您可以比较哈希值以查看 EULA 中是否有更改。

关于java - Android 共享首选项 : String stored has different length than String retrieved?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031654/

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