如果需要将一个对象存储到Android SharedPreferences中,可以用到下面的办法:
以我的例子来说,我需要将一个标记账本的对象,其中元素为封面背景id(int)和账本名称(String)的对象存储至SharedPreferences。
下面是我封装改账本(Book)的Bean:
package beans; /** * Created by Chase on 2017/5/3. */ public class BookBean { public String bookName; public int bookBgSrc; public BookBean(){ } public BookBean(String bookName,int bookBgSrc){ this.bookName = bookName; this.bookBgSrc =bookBgSrc; } public String getBookName(){ return bookName; } public int getBookBgSrc(){ return bookBgSrc; } public void setBookBgSrc(int bookBgSrc) { this.bookBgSrc = bookBgSrc; } public void setBookName(String bookName) { this.bookName = bookName; } }下面编写两个方法用来存储和读取这个Bean:
public class SpUtils { private static SharedPreferences sp; /** * 4.存储账本bookBean的list */ public static void putBookBean(Context ctx, List<BookBean> bookList) { if (sp == null) { sp = ctx.getSharedPreferences("config", MODE_PRIVATE); } SharedPreferences.Editor editor = sp.edit(); Gson gson = new Gson(); String json = gson.toJson(bookList); editor.putString(ConstantValue.BOOK_BEAN, json); editor.commit(); } } /** * 读取账本bookBean的list */ public static List<BookBean> getBookBean(Context ctx) { if (sp == null) { sp = ctx.getSharedPreferences("config", MODE_PRIVATE); } Gson gson = new Gson(); String json = sp.getString(ConstantValue.BOOK_BEAN, null); Type type = new TypeToken<List<BookBean>>() { }.getType(); List<BookBean> arrayList = gson.fromJson(json, type); return arrayList; }上面读取的Type应该是java.long.reflect的。
参考一些可能出现的错误: http://stackoverflow.com/questions/43774750/failed-to-deserialized-json-object
`