保存/加载分区的回收站视图列出共享首选项中的<object>

时间:2018-04-22 13:25:31

标签: java android android-recyclerview gson sharedpreferences

我使用SectionedRecyclerView创建购物清单的2个部分,每个项目都有一个复选框,因此一个部分用于未选中的项目,另一个部分用于已检查的项目。每个部分都有一个标题和一个列表。我需要保存两个列表的内容。

分类:

public class HeaderRecyclerViewSection extends StatelessSection{

private String title;
public List<ShoppingItem> list;

public HeaderRecyclerViewSection(String title, List<ShoppingItem> list) {
    super(SectionParameters.builder()
            .itemResourceId(R.layout.shopping_item)
            .headerResourceId(R.layout.section_header)
            .build());
    this.title = title;
    this.list = list;
}

我正在尝试保存一个部分。但是当我加载行为时,我收到了这个错误:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

这发生在loadData()方法的最后一行。

我已经研究过这个错误,但似乎没有什么能解决我的问题。 我以为使用toJson和putString应该工作。也许我错误地调用了firstSection.list。

ShoppingList类:

private RecyclerView sectionHeader;
private SectionedRecyclerViewAdapter sectionAdapter;

HeaderRecyclerViewSection firstSection = new HeaderRecyclerViewSection("Unchecked", getDataSource());
HeaderRecyclerViewSection secondSection = new HeaderRecyclerViewSection("Checked", getDataSource());

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shopping_list);

    // shopping list with sections
    sectionHeader = (RecyclerView) findViewById(R.id.shopping_listView);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ShoppingList.this);
    sectionHeader.setLayoutManager(linearLayoutManager);
    sectionHeader.setHasFixedSize(true);

    sectionAdapter = new SectionedRecyclerViewAdapter();
    sectionAdapter.addSection(firstSection);
    sectionAdapter.addSection(secondSection);
    sectionHeader.setAdapter(sectionAdapter);

    loadData();
}


public void saveData() {
    SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson(firstSection.list);
    editor.putString("shopping list", json);
    editor.commit();
}

public void loadData() {
    SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
    Gson gson = new Gson();
    List<ShoppingItem> list = new ArrayList<>();
    String json = sharedPreferences.getString("shopping list", null);
    Type type = new TypeToken<List<ShoppingItem>>() {}.getType();
    list = gson.fromJson(json, type);
}

1 个答案:

答案 0 :(得分:0)

我认为你应该使用

editor.apply()

然后在将对象转换为json时,您应该将该类作为参数

toJson(firstSection,HeaderRecyclerViewSection.class);