@steve_fahrenheit
Student, a little programmer

Не сохраняется SharePreferences?

Привет всем!
Запутался, сижу и уже голова болит :)

Изучаю такое явление как SharePreferences, необходимо сохранять три значения по нажатию кнопки.

Поставил по дефолту одно из значений. Когда запускаю приложение, значение не передается.
Нажимаю на кнопку - значение передается. Но перезапускаю и его нет.

В общем не получается наладить это. Я только начал познавать эти сохранения, так что не сильно ругайтесь, что такую вещь и не могу понять :)

вот код:
SharedPrefDialog.java

import android.content.Context;
import android.content.SharedPreferences;

public class SharedPrefDialog {

    SharedPreferences mySharedPrefDialog;

    public SharedPrefDialog(Context context) {
        mySharedPrefDialog = context.getSharedPreferences("filename", Context.MODE_PRIVATE);
    }

    public void setDialogState(String state) {
        SharedPreferences.Editor editor = mySharedPrefDialog.edit();
        editor.putString("Dialog", state);
        editor.commit();
    }

    public String loadDialogState () {
        String state = mySharedPrefDialog.getString("Dialog", "1");
        return state;
    }
}


Dialog:

public class A1_1_Dialog extends AppCompatActivity  {
    private ViewFlipper viewFlipper;

    final String TAG = "States";
    SharedPrefDialog sharedprefdialog;

@Override
    protected void onCreate(Bundle savedInstanceState) {

        sharedprefdialog = new SharedPrefDialog(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.a1_1_dialog_screen); //назначаем layout (внешний вид)

        viewFlipper = (ViewFlipper) findViewById(R.id.flipper);

        if(sharedprefdialog.loadDialogState() == "1") {
            // Создаем View и добавляем их в уже готовый flipper
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            int layouts[] = new int[]{ R.layout.a1_1_1_first_dialog_new, R.layout.a1_1_2_second_dialog, R.layout.a1_1_3_three_dialog };
            for (int layout : layouts)
                viewFlipper.addView(inflater.inflate(layout, null));
        }else if(sharedprefdialog.loadDialogState() == "2"){
            // Создаем View и добавляем их в уже готовый flipper
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            int layouts[] = new int[]{ R.layout.a1_1_1_first_dialog_new_1, R.layout.a1_1_2_second_dialog, R.layout.a1_1_3_three_dialog };
            for (int layout : layouts)
                viewFlipper.addView(inflater.inflate(layout, null));
        }else if(sharedprefdialog.loadDialogState() == "3"){
            // Создаем View и добавляем их в уже готовый flipper
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            int layouts[] = new int[]{ R.layout.a1_1_1_first_dialog, R.layout.a1_1_2_second_dialog, R.layout.a1_1_3_three_dialog };
            for (int layout : layouts)
                viewFlipper.addView(inflater.inflate(layout, null));
        }


Кнопки:

Button button_dialog_1 = (Button) findViewById(R.id.button_dialog_1);
        Button button_dialog_2 = (Button) findViewById(R.id.button_dialog_2);
        Button button_dialog_3 = (Button) findViewById(R.id.button_dialog_3);


        button_dialog_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sharedprefdialog.setDialogState("1");
                Toast.makeText(getBaseContext(), "1 схема", Toast.LENGTH_SHORT).show();
            }
        });



        button_dialog_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sharedprefdialog.setDialogState("2");
                Toast.makeText(getBaseContext(), "2 схема", Toast.LENGTH_SHORT).show();
            }
        });



        button_dialog_3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sharedprefdialog.setDialogState("3");
                Toast.makeText(getBaseContext(), "3 схема", Toast.LENGTH_SHORT).show();
            }
        });


В общем ощущение, что в SharedPrefDialog
loadDialogState
не передает значение в
setDialogState
. Как починить?
Спасибо :)

p.s. и еще почему-то слово *public* горит и пишет: acces can be package private, будто оно не используется в других классах, как я понял? А оно используется )
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
@steve_fahrenheit Автор вопроса
Student, a little programmer
Поменял String на Int и фиг его знает, но как то заработало. На первой попытке вякнуло что-то и в логах написало что проблема какая-то с string и int. Я переставил значение в приложении и открылось, начало даже сохраняться. Переустановил заново приложение, сбросил кэш и как то блин начало нормально функционировать без ошибок.

Ох уж этот удивительный мир природы и багов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы