Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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 SharedReferences仅在应用程序重启后更新_Android_Sharedpreferences - Fatal编程技术网

Android SharedReferences仅在应用程序重启后更新

Android SharedReferences仅在应用程序重启后更新,android,sharedpreferences,Android,Sharedpreferences,你好 我读过几乎所有关于Stackoverflow上SharedReferences的帖子,但似乎没有一篇能回答我的问题 从JSON获取令牌代码后,我将其存储在SharedReferences中,当我判断值是否正确时,我使用以下代码将字符串值保存到SharedReferences: private String mypreference = "AppData.xml"; private String KeySave = "KeySave"; sharedpreferences = getSha

你好

我读过几乎所有关于Stackoverflow上SharedReferences的帖子,但似乎没有一篇能回答我的问题

从JSON获取令牌代码后,我将其存储在SharedReferences中,当我判断值是否正确时,我使用以下代码将字符串值保存到SharedReferences:

private String mypreference = "AppData.xml";
private String KeySave = "KeySave";

sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);
String Token = json.optString("TokenFomJSON");
SharedPreferences.Editor editor = sharedpreferences.edit();
                        editor.putString(KeySave, Token);
                        editor.commit();
String KeyCaptured = sharedpreferences.getString(KeySave, "");
String KeyCaptured = sharedpreferences.getString(KeySave, "");
当我查看XML时,我可以看到保存的值,问题是当我再次将SharedReference转换回字符串以与以下代码一起使用时:

private String mypreference = "AppData.xml";
private String KeySave = "KeySave";

sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);
String Token = json.optString("TokenFomJSON");
SharedPreferences.Editor editor = sharedpreferences.edit();
                        editor.putString(KeySave, Token);
                        editor.commit();
String KeyCaptured = sharedpreferences.getString(KeySave, "");
String KeyCaptured = sharedpreferences.getString(KeySave, "");
然后返回先前保存的密钥,而不是JSON中更新的密钥

当我重新启动应用程序时,会显示正确的键

到目前为止我所做的测试

将.commit()更改为.apply()

我首先通过下面的代码调用JSON:

GetKey();

private void GetKey() {
JsonObjectRequest jsonObjReq = new JsonObjectRequest(
            Request.Method.POST, url, js,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("Token", response.toString());
                    try {
                        JSONObject json = new JSONObject(response.toString());

                        String Token = json.optString("TokenFomJSON");

                        SharedPreferences.Editor editor = sharedpreferences.edit();
                        editor.putString(KeySave , Token);
                        editor.commit();
                      //  Toast.makeText(LoginActivity.this, Token, Toast.LENGTH_SHORT).show();

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d("Token", "Error: " + error.getMessage());
        }
    })
除了上面我已经测试过的,没有很多其他的建议可以尝试,其他人有什么建议我可以尝试吗

谢谢,,
亲切问候

我已经弄明白了,我需要在JSON和请求之间提供2秒的延迟。现在一切都在进行中

请您的问题提供一个演示该问题的示例。请添加更多基于代码的信息,以便我们能够了解总体思路。最好找到解决方案。
当我查看XML时,我可以看到保存的值。如果“查看XLM”,我不清楚你会做什么。我将值存储在xml“private String mypreference=“AppData.xml”中,当我使用编辑器时,我可以看到保存在那里的更新JSON值。什么是KeySave?什么是Token?它们不能是字符串变量,因为java约定要求变量名以小写开头。