Проблема удалить резервную копию - ANDROID STUDIO - PullRequest
0 голосов
/ 14 января 2019

Intent intent1 = new Intent (Questions.this, Questions.class); startActivity (intent1); * * 1 001

Маленькая проблема в моем обучении. Извините за мой французский ^^

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

В кнопке ввода, если переменная == в таблице REPONSE.Length, она перезапускает действие и удаляет резервную копию.

Моя проблема в том, что резервная копия не удаляется сама по себе, пока активность возобновляется.

Каждый раз, когда я поддерживаю активность, она снова поднимается, не имея возможности начать снова на стадии 0.

    int REPONSE[]= new int[5]; //tableau des reponses
    int Question = 0;
     
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.questions);
     
     
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
            Question = sharedPreferences.getInt("num", 0);
     
     
     cardView1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
     
       //Restart si Question == REPONSE.length
     if (Question == REPONSE.length){
                        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.remove("num");
                        editor.apply();
                        
                        Intent intent1 = new Intent(Questions.this, Questions.class);
                        startActivity(intent1);
     
                    }
     
                 //Sauvegarde de la variable
                    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putInt("num", Question++);
                    editor.apply();
     
                  //Incrementation +1
                    Question++;
       }
            }); }

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Согласно документации remove () удаляет значение при вызове commit (). Поэтому вам нужно изменить editor.apply () на editor.commit ()

//Restart si Question == REPONSE.length
     if (Question == REPONSE.length){
                        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.remove("num");
                        editor.commit();  //editor.apply() won't work
0 голосов
/ 14 января 2019

Есть 3 пункта, которые я рекомендую вам:

Точка 1:

Попробуйте дать вашему общему предпочтению имя. Пример:

sharedPreferences = getSharedPreferences("sharedPrefName", MODE_PRIVATE);

Если вы не даете имя общему предпочтению, Android может впасть в неоднозначность и создать новое общее предпочтение, таким образом, не затрагивая старое.

Даже если вы создаете новую SharedPreference внутри метода onClick (этот процесс неправильный), и там система Android не может понять, какой Shared Preference использовать, таким образом, не влияя на данные sharedpreference, которые вы хотите изменить.

Точка 2:

Это не так важно, как первое, но для изменения данных уже существующего предпочтения вам не нужно удалять предпочтение, вместо этого просто измените значение, и оно будет обновлено по вашему требованию:

sharedPreferences.edit().putInt("num", Question++).apply();

Точка 3:

  • Создайте объект SharedPreference один раз внутри класса, где он может имеют глобальный охват.

  • Инициализируйте SharedPreference только один раз в действии внутри Метод onCreate.

Сделайте ваш код примерно таким:

public class MainActivity extends AppCompatActivity {
        SharedPreferences sharedPreferences;
        ConstraintLayout layout;
        int Question = 0;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layout_main);
            layout = findViewById(R.id.layout);

            sharedPreferences = getSharedPreferences("sharedPrefName", MODE_PRIVATE);
            Question = sharedPreferences.getInt("num",0);
            layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    sharedPreferences.edit().putInt("num", Question++).apply();
                }
            });

        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...