Android将对象存储到SharedPreferences中

如果需要将一个对象存储到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

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值