Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中获取前一个URL的共享首选项_Android_Sharedpreferences - Fatal编程技术网

在android中获取前一个URL的共享首选项

在android中获取前一个URL的共享首选项,android,sharedpreferences,Android,Sharedpreferences,我正在尝试使用共享首选项保存我的URL,并且URL每秒钟都在变化。现在我的问题是,当我尝试使用共享首选项变量获取URL时,它获取的是以前保存的URL而不是当前URL,而且当我第一次运行应用程序时,它显示为空,但第二次它显示的是第一次出现的URL 这是我的密码 SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE); SharedPreferences.Ed

我正在尝试使用共享首选项保存我的URL,并且URL每秒钟都在变化。现在我的问题是,当我尝试使用共享首选项变量获取URL时,它获取的是以前保存的URL而不是当前URL,而且当我第一次运行应用程序时,它显示为空,但第二次它显示的是第一次出现的URL

这是我的密码

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()
。这是一个时间问题。