安卓学习之解析json数据

安卓学习之解析json数据


前言

记录安卓开发的每一天,这个说明一下,写的博客虽然访问量没多少吧,但也希望找些朋友一块学习,为此,我创建了一个学习群874308732有兴趣的小伙伴可以加一下哈,我们一块学习,一起交流。


一、Json数据

现在网络传输数据大多是xml类型和json类型,但我查阅一些资料呢,json数据目前已经几乎是占据主流了吧,当然xml文件的解析呢,有时间也是可以学习一下的,基础嘛,对吧。ok,废话不多说,开始正题!

二、使用原始的JsonObject来解析

1.请求数据

解析数据呢,我们首先得获取数据是吧,这里顺便复习一下网络部分的知识

代码如下(示例):
布局的话呢,我们就简单建立一个button,点击就发起网络请求,获取数据就行了
上码!

 Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                sendRequestWithOkHttp();
            }

            private void sendRequestWithOkHttp() {
                //获取网络请求是需要耗时的,所以我们不能在主线程执行
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            //注入依赖,使用第三方库实例化一个Client
                            OkHttpClient okHttpClient = new OkHttpClient();
                            //建立一个请求,这个请求使用构造器并且采用链式编程法则添加需要的操作
                            Request request = new Request.Builder().url("http://10.0.2.2/get_data.json")
                                    .build();
                            //接着就是将这个请求执行
                            Response response = okHttpClient.newCall(request).execute();
                            //返回的数据存在response中,创建一个方法解析他
                            analysisJsonWithJsonObject(response);
                            //第二种解析方式,使用使用谷歌提供的GSON来解析,不同的是response在接收时返回的是String类型的
                            String data = response.body().toString();
                            analysisRequestWithGSON(data);
                        } catch (IOException E) {
                            E.printStackTrace();
                        }
                    }

2.解析数据

2.1JsonObject解析数据

代码如下(示例):
注意:我们在解析的时候需要看json数据是怎样嵌套的,{}的表示对象,[]表示数组,我们针对不同的嵌套方式要根据情况来按顺序去判断获取对象还是数组,这里我简单演示一下

      private void analysisJsonWithJsonObject(Response response) {
           //使用官方提供的JsonObject来解析
             try {
              //由于在json中得到时一个数组嘛,所以我们首先需要实例化一个数组,参数是传过来的返回的结构
                JSONArray jsonArray = new JSONArray(response);
              //json数据格式数组内部是个对象,所以我们需要借助数组来得到每一个对象
                  for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                       //接着就可以按照数据的给是使用键值对的方式将信息取出来了
                       ...
                       ...
                           }
               } catch (JSONException e) {
                       e.printStackTrace();
                   }
               }

2.2GSON解析数据

GSON是谷歌官方提供的一个解析json数据的一个开源库,这个从底层来看,就是对集合数组那一步做了一些封装和处理,大大简化了我们的操作。

    private void analysisRequestWithGSON(String data) {
    //使用谷歌提供的GSON来解析
     //这种解析方式有一点像Litepal操作数据库,我个人感觉都是封装映射成对象,等再学学我能看原码的时候再来看看情况
    		Gson gson = new Gson();
   		   //发送出去得到回应
        List<APP> appList = gson.fromJson(data, new TypeToken<List<APP>>() {}.getType());
      //这样我们就已经获取到映射了
          for (APP app : appList) {
          int id = app.getId();
          String name = app.getName();
          int version = app.getVersion();
          //在读取之后起码比如说可以实例化一个APP对象,将值赋给它,再去界面上展示出来,对不对
	 }
}

总结

还有一些解析这个数据的方式,等我再学学再来补充哈哈,对了,有一起学习的小伙伴可以加群:874308732


版权声明:本文为weixin_45408679原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。