クイズを作って保存ができるアプリを作っていて、editTextに書かれた内容を保存したいのですが、同じキー名で2問以上を保存すると、
1問目に書かれたeditTextの内容が上書きされてしまいます。
そこで、makeQuiz_Button2が押されたらint型のcountで+1して、キー名を変えて上書きされないようにしようと考えて書きました
クイズを2問以上作り、Terminalでrun-as使ってうまく保存されているかを確認すると、countが0から+1されて1にはなっているのですが、
1から上がらないことが分かりました。
title1というキー名で2問のeditTextの内容は保存されたので、意味なく上書き保存されてしまいます。
原因はインテントで画面遷移をしてるので、Activityが切り替わるときにcountがまた0に初期化されていると予想はしているのですが、
どうすれば、countが0に初期化されずに済みますか?また、原因が違かったり、ほかにいい方法があれば教えてほしいです。
MainActivity
1public class MainActivity extends AppCompatActivity { 2 3 static ArrayList data = new ArrayList<>(); 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 // リスト項目とListViewを対応付けるArrayAdapterを用意する 11 final ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); 12 ; 13 // ListViewにArrayAdapterを設定する 14 ListView listView = (ListView) findViewById(R.id.listView); 15 listView.setAdapter(adapter); 16 Button button = (Button) findViewById(R.id.makeQuiz_Button1); 17 button.setOnClickListener(new View.OnClickListener() { 18 @Override 19 public void onClick(View v) { 20 Intent intent = new Intent(MainActivity.this, com.test.quizmaker.MakeQuizActivity.class); 21 startActivity(intent); 22 } 23 }); 24 } 25 public void addData(String addTitle){ 26 data.add(addTitle); 27 } 28} 29
MakeQuizActivity
1public class MakeQuizActivity extends AppCompatActivity { 2 int count; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_make_quiz); 8 9 Button button2 = (Button)findViewById(R.id.makeQuiz_Button2); 10 button2.setOnClickListener(new View.OnClickListener() { 11 @Override 12 public void onClick(View v) { 13 Intent intent2 = new Intent(MakeQuizActivity.this,com.test.quizmaker.MainActivity.class); 14 PreferenceManager pm = new PreferenceManager(); 15 MainActivity main = new MainActivity(); 16 SharedPreferences sp = getSharedPreferences("DataStore",MODE_PRIVATE); 17 SharedPreferences.Editor editor = sp.edit(); 18 pm.init(sp,editor); 19 String strTitle = ((EditText)findViewById(R.id.editText)).getText().toString(); 20 String strQuiz = ((EditText)findViewById(R.id.editText2)).getText().toString(); 21 String strAnswer = ((EditText)findViewById(R.id.editText3)).getText().toString(); 22 count ++; 23 pm.saveString(strTitle, PreferenceManager.DataKeys.TITLE, String.valueOf(count)); 24 String title = sp.getString(PreferenceManager.DataKeys.TITLE.getValue() + String.valueOf(count), "Nothing"); 25 main.addData(title); 26 startActivity(intent2); 27 } 28 }); 29 } 30}
PreferenceManager
1public class PreferenceManager{ 2 3 public SharedPreferences sp; 4 public SharedPreferences.Editor spEditor; 5 List<String> titleList = new ArrayList<>(); 6 7 public enum DataKeys { 8 TITLE("title"), QUIZ("quiz"), ANSWER("answer"); 9 10 private String value; 11 12 private DataKeys(String value) { 13 this.value = value; 14 } 15 public String getValue() { 16 return this.value; 17 } 18 } 19 20 public void init(SharedPreferences sp, SharedPreferences.Editor editor) { 21 this.sp = sp; 22 this.spEditor = editor; 23 } 24 25 public void saveString(String s, DataKeys key, String count){ 26 spEditor.putString(key.getValue() + count,s); 27 spEditor.apply(); 28 } 29} 30
そもそもこういう保存にSharedPreferencesに向いていないことは知っています・・・。
データベースを使って保存をするのが良いみたいなのですが、まだデータベースの使い方の知識がないうえ、
もともとファイル保存で進めてたんですけど、今後、クイズの題名、問題、解答と分類して保存したいのでキー名で分けられて簡単なSharedPreferencesを使うことにしました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/05 07:17
2019/09/05 10:48 編集