繁体   English   中英

Android Sharedpreferences 仅在应用重启后更新

[英]Android Sharedpreferences Updating Only After App Restart

再会,

我已经阅读了 Stackoverflow 上关于 Sharedpreferences 的几乎所有帖子,但似乎没有一个回答我的问题。

从 JSON 获取令牌代码后,我将令牌代码存储在 Sharedpreferences 中,当我敬酒时,所有值都正确,然后使用以下代码将字符串值保存到 Sharedpreferences:

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();

当我查看 XML 时,我可以看到保存的值,问题是当我再次将 Sharedpreferences 转换回 String 以与以下代码一起使用时:

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());
        }
    })

}

然后我用下面的代码调用它:

String KeyCaptured = sharedpreferences.getString(KeySave, "");

除了我测试过的上述之外,没有太多其他建议可以尝试,还有其他人有我可以尝试的建议吗?

谢谢,亲切的问候

我已经想通了,我需要在 JSON 和请求之间延迟 2 秒。 现在都在工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM