0
我使用的GsonPreferenceAdapter如here與Prateek's RxPreferences庫。如何存儲和檢索列表<MyClass>使用RxPreferences對象
我的片段類代碼:
@Inject RxSharedPreferences sharedPreferences;
@Inject Gson gson;
List<MyClass> my_class_list;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Binding and Inject go here.
Class listType = new TypeToken<ArrayList<MyClass>>(){}.getClass();
GsonPreferenceAdapter<List<MyClass>> adapter = new GsonPreferenceAdapter<>(gson, listType, new ArrayList<MyClass>(), GsonPreferenceAdapter.SyntaxExceptionBehavior.NULL);
my_class_list = sharedPreferences.getObject("pref_myclass", new ArrayList<>(), adapter).get();
if(my_class_list == null)
Timber.i("Tis null.");
Timber.i("Printing MyClass items...");
for(MyClass item: my_class_list)
Timber.i("MyClass: " + item);
}
@OnClick(R.id.add)
public void add() {
MyClass entry = new MyClass("Count Dracula", "12345");
my_class_list.add(entry);
Class listType = new TypeToken<List<MyClass>>(){}.getClass();
GsonPreferenceAdapter<List<MyClass>> adapter = new GsonPreferenceAdapter<>(gson, listType, new ArrayList<MyClass>(), GsonPreferenceAdapter.SyntaxExceptionBehavior.NULL);
sharedPreferences.getObject("pref_myclass", new ArrayList<>(), adapter).set(my_class_list);
Timber.i("Data Saved");
return false;
}
當我運行它的第一次,也不會記錄提斯空這意味着my_class_list不爲空。然後點擊按鈕調用add(),這將返回保存的數據,表明它確實已保存。與當我重新啓動它崩潰的應用程序在for循環:
Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
它還打印提斯空所以我很驚訝,怎麼加空。這裏發生了什麼,以及如何解決這個問題?
內容的MyClass:
public class MyClass {
@SerializedName("name")
@Expose
public String name;
@SerializedName("number")
@Expose
public String number;
public MyClass(String name, String number) {
this.name = name;
this.number = number;
}
@Override
public String toString() {
return "MyClass{" +
"name='" + name + '\'' +
", number='" + number + '\'' +
'}';
}
}