Не получается очистить SharedPreferences через диалог
Я решил в своё приложение c календарём и заметками добавить функцию очистки SharedPreferences(в котором и хранятся заметки) через диалог, но кое-что пошло не так: заметки должны были очищатся при нажатии на кнопку "ОК" в диалоге, но очистка почему-то не происходит(никаких ошибок не вылезало), даже не смотря на то, что я это потдверждал следующей командой:
editor.apply();
Код activity_notes.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="Notes">
<ImageButton
android:id="@+id/imageButton3"
android:layout_width="83dp"
android:layout_height="73dp"
android:layout_marginStart="1dp"
android:layout_marginLeft="1dp"
android:layout_marginBottom="5dp"
android:contentDescription="@string/addnote"
android:onClick="addnote"
android:src="@android:drawable/ic_input_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="ImageContrastCheck" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="279dp"
android:layout_marginBottom="324dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/final_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:id="@+id/notesView"
android:layout_width="410dp"
android:layout_height="468dp"
android:text=""
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/clear_notes"
android:layout_width="65dp"
android:layout_height="55dp"
android:layout_marginStart="335dp"
android:layout_marginLeft="335dp"
android:layout_marginTop="538dp"
android:layout_marginEnd="11dp"
android:layout_marginRight="11dp"
android:layout_marginBottom="10dp"
android:contentDescription="@string/delete_notes"
android:onClick="clear_notes"
android:src="@android:drawable/ic_menu_delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="SpeakableTextPresentCheck" />
</androidx.constraintlayout.widget.ConstraintLayout>
Код Notes.java(Если что, код очистки заметок в методе clear_notes):
package com.masterok.calendar;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class Notes extends AppCompatActivity {
final Context context = this;
final Context context1 = this;
public ImageButton button;
public TextView final_text;
public SharedPreferences pref;
public EditText input_text;
public TextView notesView;
public final String save_key = "save note";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notes);
notesView = (TextView)findViewById(R.id.notesView);
button = findViewById(R.id.imageButton3);
final_text = findViewById(R.id.final_text);
init();}
public void init(){
pref = getSharedPreferences( "note",MODE_PRIVATE);
input_text = findViewById (R.id.input_text);
notesView.setText(pref.getString(save_key,"You haven`t got any note"));
}
public void clear_notes(View arg0){
LayoutInflater li = LayoutInflater.from(context1);
View promptsView = li.inflate(R.layout.deleting_notes, null);
AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(context1);
mDialogBuilder.setView(promptsView);
mDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
SharedPreferences sharedPrefs = context.getSharedPreferences(save_key, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.apply();
editor.remove(save_key );
editor.apply();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = mDialogBuilder.create();
alertDialog.show();
}
public void addnote(View arg0) {
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompt, null);
AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(context);
mDialogBuilder.setView(promptsView);
final EditText userInput = promptsView.findViewById(R.id.input_text);
mDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
final_text.setText(userInput.getText());
SharedPreferences.Editor edit = pref.edit();
edit.putString(save_key,final_text.getText().toString());
edit.apply();
notesView.setText(pref.getString(save_key,"You haven`t got any note"));
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = mDialogBuilder.create();
alertDialog.show();
}
}
Код prompt.xml(Это диалог добавления заметки):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/write_the_note"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<requestFocus />
</EditText>
</LinearLayout>
Код deleting_notes.xml(Это диалог очистки заметок):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/do_you_want_to_clear_notes" />
</LinearLayout>
Скажите пожалуйста, как исправить эту проблему.
Ответы (1 шт):
Посмотрев на комментарий от пользователя woesss, я нашёл ответ на мой вопрос.
Проблема была в моём коде(в файле Notes.java, в методе init), а именно в этой строчке: pref = getSharedPreferences( "note",MODE_PRIVATE); В этой строке я пытался получить SharedPreferences, который я не создавал. Вместо этой ошибочной строчки должно быть вот, что: getSharedPreferences(save_key, MODE_PRIVATE); Когда я это исправил, проблема исчезла. Если у вас тоже будет такая же проблема, то этот ответ может вам помочь.