安卓共享首选项仅在应用程序重启后更新



美好的一天,

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

从 JSON 获取令牌代码后,我将令牌代码存储在共享首选项中,当我吐出所有正确的值时,然后使用以下代码将字符串值保存到共享首选项:

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时,我可以看到保存的值,问题是当我再次将共享首选项转换回字符串以与以下代码一起使用时:

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 秒的延迟。现在全部工作

最新更新