Автосохранение общих настроек - PullRequest
0 голосов
/ 18 мая 2018

Я поместил весь свой код для сохранения общих настроек в методе saveData(), и я подумал, что если я добавлю этот метод в методы ОС с истекшим жизненным циклом (onStop (), onDestroy ()), он будет вызываться автоматическивсякий раз, когда приложение закрывается, но это не так!
Как мне это сделать?

public void saveData() {
        mSharedPreferences = getSharedPreferences(KEY_SHARED_PREFERENCES, MODE_PRIVATE);
        SharedPreferences.Editor mEditor = mSharedPreferences.edit();
        mGson = new Gson();
        String s1 = mGson.toJson(t); //ArrayList<CustomObj>
        String s2 = mGson.toJson(g); //ArrayList<String>
        String s3 = mGson.toJson(i); //CustomObj

        mEditor.putString(KEY_T, s1);
        mEditor.putString(KEY_G, s2);
        mEditor.putString(KEY_I, s3);
        mEditor.putString(KEY_SELECT, select);
        mEditor.putInt(KEY_POSITION_T, positionT);
        mEditor.putInt(KEY_POSITION_M, positionM);

        mEditor.apply();
    }

Я видел это в видео на YouTube, так что это не должно быть проблемой, я могу 'Остальная часть моей деятельности не помещается, потому что она слишком длинная.

1 Ответ

0 голосов
/ 18 мая 2018

Я думаю, вы думаете, что данные не сохраняются в вашем SharedPreferences, потому что вы не можете их прочитать, потому что это всегда null.Но нет необходимости делать SharedPreferences переменную класса.Попробуйте это и вставьте saveData() в ваш onStop() метод:

public void saveData() {
    //No need to make the SharedPreferences object a class instance variable...keep it local
        SharedPreferences sharedPreferences = getSharedPreferences(KEY_SHARED_PREFERENCES, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        mGson = new Gson();
        String s1 = mGson.toJson(t); //ArrayList<CustomObj>
        String s2 = mGson.toJson(g); //ArrayList<String>
        String s3 = mGson.toJson(i); //CustomObj

        editor.putString(KEY_T, s1);
        editor.putString(KEY_G, s2);
        editor.putString(KEY_I, s3);
        editor.putString(KEY_SELECT, select);
        editor.putInt(KEY_POSITION_T, positionT);
        editor.putInt(KEY_POSITION_M, positionM);

        editor.apply();
    }

Теперь вызовите loadData() из onCreate() (вы не проверяете, является ли mSharedPreferences null ... don 'даже объявить его переменной класса !!)

private void loadData() {
    try {
        SharedPreferences pref = getSharedPreferences(KEY_SHARED_PREFERENCES, MODE_PRIVATE);
        //If the key is not available neither are the values!!
        if(pref.contains(KEY_T)){
            //read your data!!
        }
    }
    catch (Exception ex) {
        Log.e(TAG, ex.getMessage());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...