我正在编写一些Android代码,将应用程序EULA作为String下载并将其存储在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检索的String的值在此函数的结尾与再次调用它的时间之间发生变化,但我确认应用程序的其他任何部分都没有触及" eula_text&# 34;价值(即使它确实如此,为什么在地球上它只会在结尾添加四个空格?)。
从mPrefs中检索后,我可以从String中删除最后4个字符,但我担心它们可能并不总是空白。或者,我可以做这个比较:
oldEula.substring(0, currentEula.length()).equals(currentEula)
然而,如果EULA更新只是剥离最后一项(不是很可能,但仍然可能),这会产生误报。有谁知道为什么我的String会随机添加4个空白字符?
答案 0 :(得分:1)
您可以存储当前EULA的当前EULA +哈希值。
然后你可以比较哈希值,看看EULA是否有变化。