Проблема с передачи массивов через preferences в Java Android
Суть программы:
Таблица, в которую можно вписывать текст и менять цвет разных клеток.
Реализация программы:
Я попытался вшить preferences для сохранения данных после перезапуска программы. Для этого я создал 2 метода: saveTable (для сохранения данных перед выходом) и loadTable (для выгрузки данных при входе). Метод saveTable я заставил запускаться с стандартным методом protected void onResume(), а метод loadTable - стаким же стандартным методом protected void onStop(). Я решил вшить loadTable в onStop потому как согласно таблице из моего учебника (Head First Android), он выполняеться в любом случае (как при запуске, так и при перезапуске или возвращении активности на первый план.
Суть проблемы:
Почему-то переданный через preferences массив HashSet в методе saveTable(), который должен сохранять данные в формате String после преобразования из HashSet (Массив называеться PutText) в Set (чтобы передать через preferences) и обратно этот массив (Уже GetText) в методе loadTable мне говорит Android Studio, что он теперь сохраняет данные в формате CharSequences или в формате Integer Вот скриншот: 
Но если все таки переобразовать это в CharSequences или в Integer, то клетки в программе заполняються пустотой.
В этом и заключаеться проблема.
Полный код из MainActivity.java и activity_main.xml
Вот код из MainActivity.java:
package com.hfad.project_n20;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import java.util.HashSet;
import java.util.Iterator;
public class MainActivity<GT> extends AppCompatActivity {
EditText Name_Enter;
Button Num_1;
Button Num_2;
Button Num_3;
Button Num_A;
Button Num_B;
Button Num_C;
Button A1;
Button A2;
Button A3;
Button B1;
Button B2;
Button B3;
Button C1;
Button C2;
Button C3;
RadioButton Color_Red;
RadioButton Color_Blue;
RadioButton Color_Green;
String a1_text = "";
String a2_text = "";
String a3_text = "";
String b1_text = "";
String b2_text = "";
String b3_text = "";
String c1_text = "";
String c2_text = "";
String c3_text = "";
TextView loglist;
final String SAVED_TEXT = "saved_text";
final String SAVED_COLOR = "saved_color";
final String RED = "RED";
final String BLUE = "BLUE";
final String GREEN = "GREEN";
final String NOTHING = "NOTHING";
SharedPreferences sPrefColorSave;
SharedPreferences sPrefTextSave;
SharedPreferences sPrefColorLoad;
SharedPreferences sPrefTextLoad;
HashSet<String> PutText = new HashSet<>();
HashSet<String> PutColor = new HashSet<>();
HashSet<String> GetText = new HashSet<>();
HashSet<String> GetColor = new HashSet<>();
String GT [] = new String [10];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name_Enter = (EditText)findViewById(R.id.Name_Enter);
Num_1 = (Button)findViewById(R.id.Num_1);
Num_2 = (Button)findViewById(R.id.Num_2);
Num_3 = (Button)findViewById(R.id.Num_3);
Num_A = (Button)findViewById(R.id.Num_A);
Num_B = (Button)findViewById(R.id.Num_B);
Num_C = (Button)findViewById(R.id.Num_C);
A1 = (Button)findViewById(R.id.A1);
A2 = (Button)findViewById(R.id.A2);
A3 = (Button)findViewById(R.id.A3);
B1 = (Button)findViewById(R.id.B1);
B2 = (Button)findViewById(R.id.B2);
B3 = (Button)findViewById(R.id.B3);
C1 = (Button)findViewById(R.id.C1);
C2 = (Button)findViewById(R.id.C2);
C3 = (Button)findViewById(R.id.C3);
Color_Red = (RadioButton)findViewById(R.id.Color_Red);
Color_Blue = (RadioButton)findViewById(R.id.Color_Blue);
Color_Green = (RadioButton)findViewById(R.id.Color_Green);
loglist = (TextView)findViewById(R.id.tV);
}
@Override
protected void onResume() {
super.onResume();
loadTable(); //При перезапуске выполняеться заполнение клеток текстом
}
@Override
protected void onStop() {
super.onStop();
saveTable(); //текст из клеток сохраняеться при выходе из программы
}
public void OnClick(View view){
switch (view.getId()){ //Это чтобы красить(пока не реализовано) и вставлять текст в клетки
case R.id.A1:
if(Color_Red.isChecked()){
A1.setText(Name_Enter.getText());
a1_text = String.valueOf(Name_Enter.getText());
}
else if(Color_Blue.isChecked()){
A1.setText(Name_Enter.getText());
a1_text = String.valueOf(Name_Enter.getText());
}
else if(Color_Green.isChecked()){
A1.setText(Name_Enter.getText());
a1_text = String.valueOf(Name_Enter.getText());
}
else{
A1.setText(Name_Enter.getText());
a1_text = String.valueOf(Name_Enter.getText());
}
break;
case R.id.A2:
if(Color_Red.isChecked()){
A2.setText(Name_Enter.getText());
a2_text = String.valueOf(Name_Enter.getText());
}
else if(Color_Blue.isChecked()){
A2.setText(Name_Enter.getText());
a2_text = String.valueOf(Name_Enter.getText());
}
else if(Color_Green.isChecked()){
A2.setText(Name_Enter.getText());
a2_text = String.valueOf(Name_Enter.getText());
}
else{
A2.setText(Name_Enter.getText());
a2_text = String.valueOf(Name_Enter.getText());
}
break;
}
}
void saveTable() {
if(a1_text == ""){
a1_text = "-----";
PutText.add(a1_text); //Если эту клетку не заполнили за время выполнения - сохраняеться стандартное значение
}
else{
PutText.add(a1_text);
}
if(a2_text == ""){
a2_text = "-----";
PutText.add(a2_text);
}
else{
PutText.add(a2_text);
}
sPrefTextLoad = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor edText = sPrefTextLoad.edit();
edText.putStringSet(SAVED_TEXT, PutText);
edText.commit(); //просто сохранение данных текста
}
void loadTable(){
sPrefTextLoad = getPreferences(MODE_PRIVATE);
GetText = (HashSet<String>) sPrefTextLoad.getStringSet(SAVED_TEXT, GetText);
Iterator iterator = GetText.iterator(); //создание итератора
A1.setText(iterator.next()); //а вот тут уже ошибка
}
}
Вот код из activity_main.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=".MainActivity">
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="111dp"
android:layout_height="98dp"
android:layout_marginStart="36dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RadioButton
android:id="@+id/Color_Red"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Red" />
<RadioButton
android:id="@+id/Color_Green"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Green" />
<RadioButton
android:id="@+id/Color_Blue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Blue" />
</RadioGroup>
<EditText
android:id="@+id/Name_Enter"
android:layout_width="574dp"
android:layout_height="44dp"
android:ems="10"
android:hint="Enter name"
android:inputType="textPersonName"
android:textAllCaps="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.312"
app:layout_constraintStart_toEndOf="@+id/radioGroup"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/B1"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/B2"
app:layout_constraintTop_toTopOf="@+id/B2" />
<Button
android:id="@+id/A1"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/A2"
app:layout_constraintTop_toTopOf="@+id/A2" />
<Button
android:id="@+id/C1"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/C2"
app:layout_constraintTop_toTopOf="@+id/C2" />
<Button
android:id="@+id/B3"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toEndOf="@+id/A3"
app:layout_constraintTop_toBottomOf="@+id/A3" />
<Button
android:id="@+id/C3"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toEndOf="@+id/B3"
app:layout_constraintTop_toBottomOf="@+id/B3" />
<Button
android:id="@+id/C2"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/C3"
app:layout_constraintTop_toBottomOf="@+id/B3" />
<Button
android:id="@+id/A3"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toEndOf="@+id/Num_3"
app:layout_constraintTop_toBottomOf="@+id/Num_3" />
<Button
android:id="@+id/Num_1"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:text="1"
app:layout_constraintEnd_toStartOf="@+id/Num_2"
app:layout_constraintTop_toTopOf="@+id/Num_2" />
<Button
android:id="@+id/B2"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/B3"
app:layout_constraintTop_toTopOf="@+id/B3" />
<Button
android:id="@+id/A2"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:onClick="OnClick"
android:text="-----"
app:layout_constraintEnd_toStartOf="@+id/A3"
app:layout_constraintTop_toTopOf="@+id/A3" />
<Button
android:id="@+id/Num_2"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:text="2"
app:layout_constraintEnd_toStartOf="@+id/Num_3"
app:layout_constraintTop_toTopOf="@+id/Num_3" />
<Button
android:id="@+id/Num_3"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="164dp"
android:background="@drawable/button"
android:text="3"
app:layout_constraintEnd_toEndOf="@+id/Name_Enter"
app:layout_constraintTop_toBottomOf="@+id/Name_Enter" />
<Button
android:id="@+id/Num_C"
android:layout_width="57dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:text="C"
app:layout_constraintEnd_toStartOf="@+id/C1"
app:layout_constraintTop_toBottomOf="@+id/B1" />
<Button
android:id="@+id/Num_A"
android:layout_width="57dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:text="A"
app:layout_constraintEnd_toStartOf="@+id/A1"
app:layout_constraintTop_toTopOf="@+id/A1" />
<Button
android:id="@+id/Num_B"
android:layout_width="57dp"
android:layout_height="40dp"
android:background="@drawable/button"
android:text="B"
app:layout_constraintEnd_toStartOf="@+id/B1"
app:layout_constraintTop_toTopOf="@+id/B1" />
<TextView
android:id="@+id/tV"
android:layout_width="447dp"
android:layout_height="157dp"
android:layout_marginStart="133dp"
android:layout_marginTop="26dp"
android:layout_marginEnd="152dp"
android:layout_marginBottom="4dp"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/C1"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
Надеюсь на вашу помощь