2017-06-21 16 views
0

このトピックに関する他のいくつかの質問を見ても、私のバグの原因を見つけることができませんでした。共有環境設定の書き込みと読み取りが正しく動作しない

私はSharedPreferencesにAssignmentsというカスタムオブジェクトのJSON文字列を格納しています。

は、ここに私のAssignment.save()メソッド

public void save(Context context) { 
     String assignment = _gson.toJson(this); 
     SharedPreferences prefs = context.getSharedPreferences(prefs_file, Context.MODE_PRIVATE); 
     SharedPreferences.Editor edit = prefs.edit(); 
     edit.clear(); 
     edit.putString(this._assignmentName, assignment); 
    } 

である私もsharedPreferences内のすべての割り当てを読み、割り当てたオブジェクトのリストにそれらをデシリアライズし、それを返す必要があるloadAllAssignmentsメソッドを持っています。

public static List<Assignment> loadAllAssignments(Context context) { 


     List<Assignment> assignments = new ArrayList<>(); 
     Assignment assignment; 
     Gson gson = new Gson(); 

     Log.d("loadAllAssignments()", "Create SharedPrefs"); 
     SharedPreferences prefs = context.getSharedPreferences(prefs_file, Context.MODE_PRIVATE); 
     Log.d("loadAllAssignments()", "Get all keys"); 
     Map<String, ?> keys = prefs.getAll(); 
     Log.d("loadAllAssignments()", "keys " + keys.toString()); 
     for(Map.Entry<String, ?> entry : keys.entrySet()) { 
      Log.d("loadAllAssignments()",entry.getKey() + ": " + entry.getValue().toString()); 

      String temp = entry.getValue().toString(); 
      assignment = gson.fromJson(temp, Assignment.class); 
      assignments.add(assignment); 
      Log.d("loadAllAssignments()", "Loaded: " + assignment.toString()); 
     } 
     return assignments; 
    } 

私はSharedPreferencesファイルからキーのいずれかを取得しておりませんので、バグがprefs.getAll()ラインで起こっています。誰がなぜこれが起こっているのかについていくつかのアイデアを持っていますか?ここで

は、私はそれを

public void SaveLoadAssignments() throws Exception { 
     Context appContext = InstrumentationRegistry.getTargetContext(); 

     Assignment assignment1 = new Assignment("Midterm", new Rubric()); 
     for (Integer i = 0; i < 10; i++) { 
      assignment1.addStudent("John", i.toString()); 
     } 
     assignment1.save(appContext); 

     Assignment assignment2 = new Assignment("Final", new Rubric()); 
     for (Integer i = 0; i < 5; i++) { 
      assignment2.addStudent("John", i.toString()); 
     } 
     assignment2.save(appContext); 

     List<Assignment> assignments = Assignment.loadAllAssignments(appContext); 
    } 

をテストするために使用していたコードであるあなたは、あなたのsharedPreferencesにいくつかのデータを追加した後editor.commit()を呼び出す必要があり、事前に

+1

あなたは – Opiatefuchs

+0

ありがとう... sharedPreferencesにデータを入れた後 ')(' editor.commitを呼び出す必要があります。私はAndroidがかなり新しいです。 –

+0

よろしくお願いします.. – Opiatefuchs

答えて

1

、ありがとうございました。だからこの方法でなければなりません:

public void save(Context context) { 
     String assignment = _gson.toJson(this); 
     SharedPreferences prefs = context.getSharedPreferences(prefs_file, Context.MODE_PRIVATE); 
     SharedPreferences.Editor edit = prefs.edit(); 
     edit.clear(); 
     edit.putString(this._assignmentName, assignment); 
     edit.commit(); 
    } 
関連する問題