240 發(fā)簡(jiǎn)信
IP屬地:湖北
  • 虛函數(shù)的重載與訪問

    本文參考了虛函數(shù)的訪問控制與多態(tài),在此基礎(chǔ)上,通過示例說明了虛函數(shù)的重載不受訪問控制符的限制涡戳,通過指針或者引用可以訪問到各個(gè)訪問控制級(jí)別的虛函數(shù)钳枕。 編譯器在決定調(diào)用函數(shù)時(shí)挤庇,如...

  • Retrofit實(shí)用指南

    網(wǎng)上關(guān)于Retrofit(這里指的是Retrofit2包里的Retrofit)的文章已經(jīng)普天蓋地了拐格!為什么還要寫這一篇呢吵取?“扔物線”給了我啟發(fā)逐虚!人們還是喜歡原創(chuàng)的東西聋溜,而不是...

  • package com.ueuo.gson;

    public class Result<T> {
    public int code;
    public String message;
    public T data;
    }

    package com.ueuo.gson;

    import com.google.gson.annotations.SerializedName;

    public class User {

    public String name;
    public int age;

    @SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
    public String emailAddress;

    public User(){
    }

    public User(String name, int age){
    this.name = name;
    this.age = age;
    }

    public User(String name, int age, String emailAddress){
    this.name = name;
    this.age = age;
    this.emailAddress = emailAddress;
    }

    }

    搞定Gson泛型封裝

    作者: @怪盜kidou 如需轉(zhuǎn)載需在明顯位置保留作者信息及原文鏈接如果博客中有不恰當(dāng)之處歡迎留言交流http://www.reibang.com/p/d62c2be60...

  • CustomTypeAdapter<T>示例:

    第二部分

    @SuppressWarnings("unchecked")
    @Override
    public T read(JsonReader in) throws IOException {

    if( in.peek().equals(JsonToken.BEGIN_ARRAY)){
    List<User> list = new ArrayList<User>();

    in.beginArray();
    while (in.hasNext()) {
    User user = new User();
    in.beginObject();
    while (in.hasNext()) {
    switch (in.nextName()) {
    case "name":
    user.name = in.nextString();
    break;
    case "age":
    user.age = in.nextInt();
    break;
    case "email":
    case "email_address":
    case "emailAddress":
    user.emailAddress = in.nextString();
    break;
    }
    }
    in.endObject();
    list.add(user);
    }
    in.endArray();
    return (T) list;
    }else{
    User user = new User();

    in.beginObject();
    while (in.hasNext()) {
    switch (in.nextName()) {
    case "name":
    user.name = in.nextString();
    break;
    case "age":
    user.age = in.nextInt();
    break;
    case "email":
    case "email_address":
    case "emailAddress":
    user.emailAddress = in.nextString();
    break;
    }
    }
    in.endObject();
    return (T) user;
    }

    }

    }

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容,轉(zhuǎn)載請(qǐng)注明出處叭爱。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • CustomTypeAdapter<T>示例:

    第一部分

    package com.ueuo.gson;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    import com.google.gson.TypeAdapter;
    import com.google.gson.stream.JsonReader;
    import com.google.gson.stream.JsonToken;
    import com.google.gson.stream.JsonWriter;

    public class CustomTypeAdapter<T> extends TypeAdapter<T>{

    @SuppressWarnings("unchecked")
    @Override
    public void write(JsonWriter out, T paramT) throws IOException {
    if(paramT instanceof User){
    out.beginObject();
    User user = (User)paramT;
    out.name("name").value(user.name);
    out.name("age").value(user.age);
    out.name("email").value(user.emailAddress);
    out.endObject();
    }else if(paramT instanceof List<?>){
    List<User> users = (List<User>)paramT;
    out.beginArray();
    for (User value : users) {
    out.beginObject();
    out.name("name").value(value.name);
    out.name("age").value(value.age);
    out.name("email").value(value.emailAddress);
    out.endObject();
    }
    out.endArray();
    }
    }

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容撮躁,轉(zhuǎn)載請(qǐng)注明出處。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第七部分:

    System.out.println("\n方案二:");
    Gson gson10 = new GsonBuilder().registerTypeHierarchyAdapter(List.class, new JsonDeserializer<List<?>>() {
    @Override
    public List<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    if (json.isJsonArray()) {
    JsonArray array = json.getAsJsonArray();
    Type itemType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];
    List list = new ArrayList<>();
    for (int i = 0; i < array.size(); i++) {
    JsonElement element = array.get(i);
    Object item = context.deserialize(element, itemType);
    list.add(item);
    }
    return list;
    } else {
    //和接口類型不符涤伐,返回空List
    return Collections.EMPTY_LIST;
    }
    }
    }).create();

    List<User> users10 = gson10.fromJson(result2, type);
    for(User user10 : users10){
    System.out.println(user10.name+"; "+user10.age+"; "+user10.emailAddress);
    }
    List<User> users11 = gson10.fromJson("\"\"", type);
    System.out.println(users11);

    }
    }

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容馒胆,轉(zhuǎn)載請(qǐng)注明出處。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第六部分:

    System.out.println("\n四凝果、@JsonAdapter注解");
    System.out.println("\n使用@JsonAdapter注解");
    Gson gson7 = new Gson();
    User7 user7 = new User7("怪盜kidou", 24, "ikidou@example.com");
    System.out.println(gson7.toJson(user7));


    System.out.println("\n六祝迂、TypeAdapter實(shí)例");
    Gson gson8 = new GsonBuilder().registerTypeHierarchyAdapter(List.class, new JsonDeserializer<List<?>>() {
    @Override
    public List<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    if (json.isJsonArray()){
    //這里要自己負(fù)責(zé)解析了
    Gson newGson = new Gson();
    return newGson.fromJson(json,typeOfT);
    }else {
    //和接口類型不符,返回空List
    return Collections.EMPTY_LIST;
    }
    }
    }).create();

    System.out.println("\n方案一:");
    List<User> users8 = gson8.fromJson(result2, type);
    for(User user8 : users8){
    System.out.println(user8.name+"; "+user8.age+"; "+user8.emailAddress);
    }
    List<User> users9 = gson8.fromJson("\"\"", type);
    System.out.println(users9);

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容器净,轉(zhuǎn)載請(qǐng)注明出處型雳。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第五部分:

    System.out.println("\n三、TypeAdapterFactory");
    System.out.println("\n自定義泛型TypeAdapter -- CustomTypeAdapter<T>");
    Gson gson6 = new GsonBuilder()
    .registerTypeAdapterFactory(new TypeAdapterFactory() {
    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
    return new CustomTypeAdapter<T>();
    }
    })
    .create();

    List<User> list2 = new ArrayList<User>();
    list2.add(new User("a", 11));
    list2.add(new User("b", 22));
    System.out.println("\n序列化");
    String result2 = gson6.toJson(list2, type);
    System.out.println(result2);
    System.out.println("\n反序列化");
    users = gson6.fromJson(result2, type);
    for (User u : users) {
    System.out.println(u.name+"; "+u.age+"; "+u.emailAddress);
    }

    System.out.println("\n序列化");
    String result3 = gson6.toJson(new User("c", 33), User.class);
    System.out.println(result3);

    System.out.println("\n反序列化");
    User user3 = gson6.fromJson(result3,User.class);
    System.out.println(user3.name+"; "+user3.age+"; "+user3.emailAddress);

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容山害,轉(zhuǎn)載請(qǐng)注明出處纠俭。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第四部分:

    @Override
    public List<User> read(JsonReader in) throws IOException {
    List<User> list = new ArrayList<User>();

    in.beginArray();
    while (in.hasNext()) {
    User user = new User();
    in.beginObject();
    while (in.hasNext()) {
    switch (in.nextName()) {
    case "name":
    user.name = in.nextString();
    break;
    case "age":
    user.age = in.nextInt();
    break;
    case "email":
    case "email_address":
    case "emailAddress":
    user.emailAddress = in.nextString();
    break;
    }
    }
    in.endObject();
    list.add(user);
    }
    in.endArray();

    return list;
    }
    };
    Gson gson5 = new GsonBuilder()
    .registerTypeAdapter(type, typeAdapter)
    .create();
    List<User> list = new ArrayList<User>();
    list.add(new User("a", 11));
    list.add(new User("b", 22));
    // 注意,多了個(gè)type參數(shù)
    System.out.println("如果一個(gè)被序列化的對(duì)象本身就帶有泛型浪慌,且注冊(cè)了相應(yīng)的TypeAdapter冤荆,\n那么必須調(diào)用Gson.toJson(Object,Type),明確告訴Gson對(duì)象的類型权纤。");
    System.out.println("\n序列化");
    String result = gson5.toJson(list, type);
    System.out.println(result);

    System.out.println("\n反序列化");
    List<User> users = gson5.fromJson(result, new TypeToken<List<User>>() {}.getType());
    for (User u : users) {
    System.out.println(u.name+"; "+u.age+"; "+u.emailAddress);
    }

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容钓简,轉(zhuǎn)載請(qǐng)注明出處乌妒。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第三部分:

    System.out.println("\n所有數(shù)字都轉(zhuǎn)成序列化為字符串的例子");
    JsonSerializer<Number> numberJsonSerializer = new JsonSerializer<Number>() {
    @Override
    public JsonElement serialize(Number src, Type typeOfSrc, JsonSerializationContext context) {
    return new JsonPrimitive(String.valueOf(src));
    }
    };
    Gson gson4 = new GsonBuilder().registerTypeAdapter(Integer.class, numberJsonSerializer)
    .registerTypeAdapter(Long.class, numberJsonSerializer)
    .registerTypeAdapter(Float.class, numberJsonSerializer)
    .registerTypeAdapter(Double.class, numberJsonSerializer).create();
    System.out.println(gson4.toJson(100.0f));// 結(jié)果:"100.0"
    System.out.println(gson4.toJson(100));// 結(jié)果:"100"
    System.out.println(gson4.toJson(100.0d));// 結(jié)果:"100.0"
    System.out.println(gson4.toJson(0x64));// 結(jié)果:"100"


    System.out.println("\nTypeAdapter<List<User>>");
    Type type = new TypeToken<List<User>>() {
    }.getType();
    TypeAdapter<List<User>> typeAdapter = new TypeAdapter<List<User>>() {

    @Override
    public void write(JsonWriter out, List<User> paramT) throws IOException {
    out.beginArray();
    for (User value : paramT) {
    out.beginObject();
    out.name("name").value(value.name);
    out.name("age").value(value.age);
    out.name("email").value(value.emailAddress);
    out.endObject();
    }
    out.endArray();
    }

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容凿傅,轉(zhuǎn)載請(qǐng)注明出處趾疚。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第二部分:

    System.out.println();
    User user2 = gson.fromJson(stringjson, User.class);
    System.out.println(user2.name);
    System.out.println(user2.age);
    System.out.println(user2.emailAddress);

    System.out.println("\n注冊(cè)一個(gè)TypeAdapter序列化和反序列化空字符串");
    Gson gson2 = new GsonBuilder().registerTypeAdapter(Integer.class, new TypeAdapter<Integer>() {
    @Override
    public void write(JsonWriter out, Integer value) throws IOException {
    out.value(String.valueOf(value));
    }

    @Override
    public Integer read(JsonReader in) throws IOException {
    try {
    return Integer.parseInt(in.nextString());
    } catch (NumberFormatException e) {
    return -1;
    }
    }
    }).create();
    System.out.println(gson2.toJson(100)); // 結(jié)果:"100"
    System.out.println(gson2.fromJson("\"\"", Integer.class)); // 結(jié)果:-1

    System.out.println("\n二铺呵、JsonSerializer與JsonDeserializer");

    System.out.println("\n只接管反序列化的過程就用 JsonDeserializer");
    Gson gson3 = new GsonBuilder().registerTypeAdapter(Integer.class, new JsonDeserializer<Integer>() {
    @Override
    public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
    throws JsonParseException {
    try {
    return json.getAsInt();
    } catch (NumberFormatException e) {
    return -1;
    }
    }
    }).create();
    System.out.println(gson3.toJson(100)); // 結(jié)果:100
    System.out.println(gson3.fromJson("\"\"", Integer.class)); // 結(jié)果-1

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容流部,轉(zhuǎn)載請(qǐng)注明出處。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 示例( 因?yàn)樘L(zhǎng)分幾部分):

    第一部分:

    package com.ueuo.gson;

    import java.io.IOException;
    import java.lang.reflect.ParameterizedType;
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonArray;
    import com.google.gson.JsonDeserializationContext;
    import com.google.gson.JsonDeserializer;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonParseException;
    import com.google.gson.JsonPrimitive;
    import com.google.gson.JsonSerializationContext;
    import com.google.gson.JsonSerializer;
    import com.google.gson.TypeAdapter;
    import com.google.gson.TypeAdapterFactory;
    import com.google.gson.reflect.TypeToken;
    import com.google.gson.stream.JsonReader;
    import com.google.gson.stream.JsonWriter;

    /**
    * 四虑凛、你真的會(huì)用Gson嗎?Gson使用指南(四)
    *
    * http://www.reibang.com/p/3108f1e44155
    *
    * @Author xbn 2017.11.21
    */
    public class UsageGsonFour {

    public static void main(String[] args) throws Exception {

    System.out.println("\n一梅鹦、TypeAdapter");
    System.out.println("\n為User注冊(cè)TypeAdapter");
    User user = new User("怪盜kidou", 24);
    user.emailAddress = "ikidou@example.com";
    Gson gson = new GsonBuilder()
    // 為User注冊(cè)TypeAdapter
    .registerTypeAdapter(User.class, new UserTypeAdapter()).create();
    String stringjson = gson.toJson(user);
    System.out.println(stringjson);

    你真的會(huì)用Gson嗎?Gson使用指南(四)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容谬返,轉(zhuǎn)載請(qǐng)注明出處丧枪。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

  • 二曹傀、 POJO與JSON的字段映射規(guī)則示例

    System.out.println("\nPOJO與JSON的字段映射規(guī)則 -- 默認(rèn)實(shí)現(xiàn)");
    Gson gson4 = new GsonBuilder()
    // .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
    .create();
    System.out.println(gson4.toJson(modifierSample));

    System.out.println("\nPOJO與JSON的字段映射規(guī)則 -- 自定義實(shí)現(xiàn)");

    Gson gson5 = new GsonBuilder()
    .setFieldNamingStrategy(new FieldNamingStrategy() {
    @Override
    public String translateName(Field f) {
    // 實(shí)現(xiàn)自己的規(guī)則
    if (f.getName().equals("finalField"))
    return "final-xbn-Field";
    else
    return f.getName();
    }
    }).create();
    System.out.println(gson5.toJson(modifierSample));

    返回:

    POJO與JSON的字段映射規(guī)則 -- 默認(rèn)實(shí)現(xiàn)
    {"final-field":"final","public-field":"public","protected-field":"protected","default-field":"default","private-field":"private"}

    POJO與JSON的字段映射規(guī)則 -- 自定義實(shí)現(xiàn)
    {"final-xbn-Field":"final","publicField":"public","protectedField":"protected","defaultField":"default","privateField":"private"}

    你真的會(huì)用Gson嗎?Gson使用指南(三)

    本文為作者根據(jù)日常使用結(jié)合Gson源碼注釋及wiki所作的原創(chuàng)內(nèi)容,轉(zhuǎn)載請(qǐng)注明出處饲宛。 該系列其它文章 你真的會(huì)用Gson嗎?Gson使用指南(一) 你真的會(huì)用Gson嗎?Gs...

亚洲A日韩AV无卡,小受高潮白浆痉挛av免费观看,成人AV无码久久久久不卡网站,国产AV日韩精品