在android中获取前一个URL的共享首选项
我正在尝试使用共享首选项保存我的URL,并且URL每秒钟都在变化。现在我的问题是,当我尝试使用共享首选项变量获取URL时,它获取的是以前保存的URL而不是当前URL,而且当我第一次运行应用程序时,它显示为空,但第二次它显示的是第一次出现的URL 这是我的密码在android中获取前一个URL的共享首选项,android,sharedpreferences,Android,Sharedpreferences,我正在尝试使用共享首选项保存我的URL,并且URL每秒钟都在变化。现在我的问题是,当我尝试使用共享首选项变量获取URL时,它获取的是以前保存的URL而不是当前URL,而且当我第一次运行应用程序时,它显示为空,但第二次它显示的是第一次出现的URL 这是我的密码 SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE); SharedPreferences.Ed
SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();
editor.putString("name", url);
editor.commit();
为了检索URL,我是这样写的
SharedPreferences preferences=getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
String name=preferences.getString("name","not loaded");
我该怎么办?
MODE\u MULTI\u进程每次都在那里刷新磁盘上的数据。因为多个进程可能正在修改首选项数据,并且一个进程的内存中加载的数据不会有来自另一个进程的更改。它因工作不可靠而被弃用
关于您的特殊问题,我建议您:
public class PrefStore {
private static final String PREF_NAME = "app_prefs";
private final SharedPreferences mPreferences;
public static final String KEY_URL = "key_url";
public PrefStore(Context context) {
mPreferences = context.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);
}
public void saveUrl(String url){
mPreferences.edit().putString(KEY_URL,url).apply();
Log.i("PREF_TEST",String.format("Write URL:%s at:%s by thread:%s",url, new Date(), Thread.currentThread().getId()));
}
public String getUrl(){
String url = mPreferences.getString(KEY_URL,null);
Log.i("PREF_TEST",String.format("READ URL:%s at:%s by thread:%s",url, new Date(), Thread.currentThread().getId()));
return url;
}
}
日志将帮助您检查是否存在计时/线程问题。您正在执行的代码可能存在问题。共享首选项存储和检索过程是完美的。但正如您所说的,每秒钟存储一次url,所以当您检索并看到url被更改时,可能会这样。尝试将日志放在进程存储区和检索区。这会给你确切的想法。当应用程序运行时,你的url是否在运行时发生变化?@reaking Out?我检查过了。假设我在1:00、5:00、7:00打开应用程序。现在,如果我在安装后1:00第一次打开它,它会显示为空,那么当我在5:00打开它时,它会传递应该在1:00出现的URL,如果我在7:00打开它,它会打开5:00 URL。我知道这一点,因为我在和疯狂机器人一起消磨时间。否URL在运行时不会更改。它只是在那个特定的时间获取URL并保持这种方式,当我关闭它并再次打开它时,它会改变。@伸出:这意味着应用程序在更新最新的URL之前,正在从SharedReferences
获取URL。请解释更多关于senior的信息,当您在tSharedPreferences
中保存url,并从itSo获取信息时,我的案例应该遵循哪种模式?可以一起去吗PRIVATE@Reaching-如果除您自己的应用程序外,没有其他应用程序将访问首选项数据,则应使用MODE\u PRIVATE
。所以,是的。不,没有其他应用在使用它。那么,您能告诉我哪里出了问题吗?我在AsyncTask任务内获取URL,在AsyncTask任务外加载webview。如果是这样的话,我怎么称呼这些呢methods@Reaching-要获取最新的url,您必须在saveUrl()
之后调用getUrl()
。这是一个时间问题。