android List 转json 问题

List 通过toString打印的格式

   [GoodsItem{id=18, typeId=1, rating='null', name='香蕉', typeName='套餐1', price=1.8, count=1}, GoodsItem{id=29, typeId=3, rating='null', name='包子', typeName='套餐1', price=1.0, count=1}, GoodsItem{id=371, typeId=0, rating='', name='苹果', typeName='热销', price=150.0, count=1}, GoodsItem{id=372, typeId=0, rating='', name='梨', typeName='套餐1', price=48.0, count=1}]
   private void commit(){
        List<GoodsItem>  carts = sparseArrayToList();
        Gson gson = new Gson();
        String info = gson.toJson(carts);
        Log.v("tojson12",info);
        try {
            CacheDataUtils.setCache(mContext,"cart_list","cart_list",info);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


         //sparseTo list
    private List<GoodsItem>  sparseArrayToList(){
        int i = 0 ;
        int size =selectedList.size();
        List<GoodsItem> carts = new ArrayList<GoodsItem>(size);
        for ( i = 0 ; i < selectedList.size() ; i++){
            carts.add(selectedList.valueAt(i)) ;
        }
        Log.v("sparseArrayToList",carts.toString());
        return carts ;
    }

Gson toJson解析不出来,有时候还奔溃,

你这种情况最好把报错地方的日志贴出来,不然很难知道是什么错误。
selectedList.valueAt(i)这个是什么?

 09-29 10:01:34.414 11299-11457/com.zaocanwebapi.zaocanapp E/AndroidRuntime: FATAL EXCEPTION: Thread-5
                                                                            Process: com.zaocanwebapi.zaocanapp, PID: 11299
                                                                            java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible
                                                                                at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:131)
                                                                                at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:115)
                                                                                at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101)
                                                                                at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:95)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.MapTypeAdapterFactory.create(MapTypeAdapterFactory.java:126)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
09-29 10:01:34.415 11299-11457/com.zaocanwebapi.zaocanapp E/AndroidRuntime:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
09-29 10:01:34.416 11299-11457/com.zaocanwebapi.zaocanapp E/AndroidRuntime:     at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.MapTypeAdapterFactory.create(MapTypeAdapterFactory.java:126)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
09-29 10:01:34.416 11299-11457/com.zaocanwebapi.zaocanapp E/AndroidRuntime:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:135)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:105)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:104)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:160)
                                                                                at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96)
                                                                                at com.google.gson.Gson.getAdapter(Gson.java:416)
                                                                                at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
                                                                                at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
                                                                                at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
                                                                                at com.google.gson.Gson.toJson(Gson.java:661)
                                                                                at com.google.gson.Gson.toJson(Gson.java:640)
                                                                                at com.google.gson.Gson.toJson(Gson.java:595)
                                                                                at com.google.gson.Gson.toJson(Gson.java:575)
                                                                                at com.zaocanwebapi.zaocanapp.list.ListFragment.commit(ListFragment.java:419)
                                                                                at com.zaocanwebapi.zaocanapp.list.ListFragment.access$700(ListFragment.java:59)
                                                                                at com.zaocanwebapi.zaocanapp.list.ListFragment$6.run(ListFragment.java:388)
                                                                                at java.lang.Thread.run(Thread.java:764)

Key 应该是 String 类型,你这不是;

格式有问题:正确格式
例:
[{
"id": 18,
"typeId": 1
},
{
"id": 19,
"typeId": 2
}]

toString方法打印的字符串不是规范的json字符串格式,试试能不能重写一下toString方法

不知道你的GoodsItem里的写法,信息少不好分析,有个笨办法,手动写包含两个GoodsItem的json串,用gsonformat插件生成实体类,然后和你写的GoodsItem类对比就知道问题在哪了