美文网首页Android开发Android开发经验谈我爱编程
Gson使用心得(Android中的简单应用)

Gson使用心得(Android中的简单应用)

作者: 纳米程序员 | 来源:发表于2018-05-28 17:16 被阅读44次

    Gson的基本用法

    服务器返回的JSON数据:

    "user": [

        {

          "name": "zhangsan",

          "age": "10"

        }

    ]

    首先,编写一个对象类bean:

    public class User {

        private String name;

        private int age;

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public int getAge() {

            return age;

        }

        public void setAge(int age) {

            this.age = age;

        }

        @Override

        public String toString()

        {

            return name + ":" +age;

        }

    }

    如果你和我一样是Android studio用户,可以使用插件GsonFormat自动生成bean类。

    然后:

    User mUser = new Gson().fromJson(jsonObject.getString("user"),User.class);

    就可以生成一个user对象来操作。

    那么服务器如果返回user数组怎么办呢?

    类似这样的json:

    "user": [

        {

          "name": "zhangsan",

          "age": "10"

        },

        {

          "name": "lisi",

          "age": "8"

        },

        {

          "name": "wangwu",

          "age": "12

        }

    ]

    这种情况,网上挺多人是使用jsonarray,遍历array一个一个user的取,然后装进集合。其实不必那么麻烦。

    先上代码:

    List mUsers = gson.fromJson(jsonObject.getString("user"), new TypeToken>() {

                                }.getType());

    还是可以一行代码搞定。这个东西是不是有点意思呢?

    import com.google.gson.reflect.TypeToken;

    查阅源码可以得知,这是一个反射类,可以跟据你传的数据类型,利用反射取到你定义的字段并赋值。比如List。

    灰常强大且实用。

    大部分开发者会抽取一个解析类来解析不一样的数据类型,如果数据类型不是bean是泛型T,那如何用Gson来解析呢?

    泛型解析,先上代码:

    class GsonParse{

      public T parseJson(String jsonString) {

            ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();

            Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();

            return  new Gson().fromJson(jsonString, actualTypeArguments[0]);

        }

    }

    然后使用这个类去解析上面的数据。

    List mUsers =new GsonParse>.parseJson(jsonObject.getString("user"));

    就可以解析成你想要的List类型了,是不是很实用呢?

    通过查阅源码可以得知,这原理是通过父类可以得到传进来的泛型类型,我们只传递了一个泛型,

    直接取第0个角标上的值就行了。

    相关文章

      网友评论

        本文标题:Gson使用心得(Android中的简单应用)

        本文链接:https://www.haomeiwen.com/subject/bswgjftx.html