第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Gson 在使用中的一些技巧

標(biāo)簽:
Android

简介

前段时间在换成gson 重写下解析遇到一些问题,之前是使用JSONObject 进行解析,在使用GSON 之后发现解析数据错误和获取不到值得问题。

  1. 后台格式不规范 

    例如:   
    有值时返回:
    
         {
         person:{"name":"wang",age=17}
         }
    
    有没有值时返回:
    
        {
        person:[]
        }
    
    这个时候用gson就会抛出解析异常。   
    **解决方案:**(使用 TypeAdapterFactory)
final static class SafeTypeAdapterFactory implements TypeAdapterFactory{  
  
        @Override  
        public  TypeAdapter create(Gson gson, final TypeToken type) {  
            final TypeAdapter delegate = gson.getDelegateAdapter(this,type);  
            return new TypeAdapter() {  
                @Override  
                public void write(JsonWriter out, T value) throws IOException {  
                    try {  
                        delegate.write(out, value);  
                    } catch (IOException e) {  
                        delegate.write(out, null);  
                    }  
                }  
  
                @Override  
                public T read(JsonReader in) throws IOException {  
                    try {  
                        return delegate.read(in);  
                    } catch (IOException e) {  
                        in.skipValue();  
                        return null;  
                    } catch (IllegalStateException e) {  
                        in.skipValue();  
                        return null;  
                    } catch (JsonSyntaxException e) {  
                        in.skipValue();  
                        if(type.getType() instanceof Class){  
                            try {  
                                return (T) ((Class)type.getType()).newInstance();  
                            } catch (Exception e1) {  
  
                            }  
                        }  
                        return null;  
                    }  
                }  
            };  
        }  
    }

使用GSON 时:

Gson myGson = new GsonBuilder().registerTypeAdapterFactory(new SafeTypeAdapterFactory()).create();

例如解析下面这样的bean:

class Bean{
   Inner in;
   String a;
   String b;   class Inner{
      String c;
   }
}

返回的Bean 就会是 in = new Inner();其他的异常就会赋值为null,具体可以根据自己需要修改。  
2. 解析bool 类型时服务器有两个写法:第一种 True 或者 False ,第二种 0 代表 False 1 代表 True。

我在bean 中都使用 boolean 来表示该值

解决方案:(使用TypeAdapter)

Gson myGson = new GsonBuilder()
              .registerTypeAdapter(boolean.class, new JsonDeserializer<Boolean>() {                    @Override
                    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {                        try {                            return json.getAsInt() == 1;
                        }catch (NumberFormatException e){                            return json.getAsBoolean();
                        }
                    }
                }).create();

3.对于bean 中有部分属性需要忽略  
解决方案:(使用ExclusionStrategy)

创建注解类 Exclude

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Exclude {
}

在gson中配置 忽略带有Exclude的属性:

Gson gson = new GsonBuilder()
                .setExclusionStrategies(new ExclusionStrategy(){                @Override
        public boolean shouldSkipField(FieldAttributes f) {            return f.getAnnotation(Exclude.class) != null;
        }        @Override
        public boolean shouldSkipClass(Class<?> clazz) {            return false;
        }
})

使用时在需要忽略的属性上标记@Exclude 即可:

class Mock{
String name;
String age;@ExcludeString gender;
}

原文链接:http://www.apkbus.com/blog-822724-68250.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消