Java 如何存储和检索列表<;MyClass>;使用RxPreferences的对象

Java 如何存储和检索列表<;MyClass>;使用RxPreferences的对象,java,android,sharedpreferences,rx-android,Java,Android,Sharedpreferences,Rx Android,我正在使用GsonPreferenceAdapter,如库所示 我的片段类代码: @Inject RxSharedPreferences sharedPreferences; @Inject Gson gson; List<MyClass> my_class_list; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState

我正在使用GsonPreferenceAdapter,如库所示

我的片段类代码:

@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;
}
它还打印出Tis null,所以我很惊讶null是如何添加的。这是怎么回事,怎么解决

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 + '\'' +
                '}';
    }

}

没关系,我自己想出来的。如果其他人遇到同样的问题,我会给出答案。问题出在GsonPreferenceAdapter上,我把它撕掉了。我把班级改成打字班,一切都很顺利

Type type = new TypeToken<List<MyClass>>(){}.getType();
GsonPreferenceAdapter<List< MyClass >> adapter = new GsonPreferenceAdapter<>(gson, type, new ArrayList<>(), GsonPreferenceAdapter.SyntaxExceptionBehavior.NULL);
my_class_list = sharedPreferences.getObject("pref_myclass", new ArrayList<>(), adapter).get();
Type Type=new-TypeToken(){}.getType();
GsonPreferenceAdapter>adapter=new-GsonPreferenceAdapter(gson,type,new-ArrayList(),GsonPreferenceAdapter.SyntaxExceptionBehavior.NULL);
my_class_list=SharedReferences.getObject(“pref_myclass”,new ArrayList(),adapter).get();
Type type = new TypeToken<List<MyClass>>(){}.getType();
GsonPreferenceAdapter<List< MyClass >> adapter = new GsonPreferenceAdapter<>(gson, type, new ArrayList<>(), GsonPreferenceAdapter.SyntaxExceptionBehavior.NULL);
my_class_list = sharedPreferences.getObject("pref_myclass", new ArrayList<>(), adapter).get();