Android Общие настройки обновляются только после перезапуска приложения - PullRequest
0 голосов
/ 17 июня 2020

Добрый день,

Я прочитал почти все сообщения, касающиеся общих предпочтений в Stackoverflow, но ни один из них, похоже, не ответил на мой вопрос.

Я сохраняю код токена в общих предпочтениях после его получения из JSON, когда я всплываю все значения правильно, я сохраняю строковое значение в 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, "");

Кроме выше, что я тестировал, других предложений не так много желаю попробовать, у кого-нибудь есть предложения, которые я мог бы попробовать?

Спасибо, С уважением

1 Ответ

0 голосов
/ 17 июня 2020

Я разобрался, мне нужно было дать задержку в 2 секунды c между JSON и запросом. Все работает сейчас

...