当前位置: 首页 > news >正文

Android Studio新手开发第二十九天

目录

移动数据格式JSON

Gson库解析JSON

移动数据格式JSON

        网络通信的交互数据格式主要有两种,一种是JSON,它携带的数据比较简单,一种是XML,它携带的数据较为丰富。一般选择JSON格式与服务器通信,因为一方面可以节省手机流量,另一方面JSON串解析更快也更省电,这是XML格式所没有的。

        Android针对JSON格式字符串提供了JSON解析工具,支持对JSONObject(JSON对象)和JSONArray(JSON数组)的解析处理。两者的介绍如下:

        1.JSONObject常用方法说明如下:

                (1)JSONObject构造函数:从指定字符串构造一个JSONObject对象。

                (2)getJSONObject:获取指定名称的JSONObject对象。

                (3)getString:获取指定名称的字符串。

                (4)getInt:获取指定名称的整型数。

                (5)getDouble:获取指定名称的双精度数。

                (6)getBoolean:获取指定名称的布尔数。

                (7)getJSONArray:获取指定名称的JSONArray数组对象。

                (8)put:添加一个JSONObject对象。

                (9)toString:把当前的JSONObject对象输出为一个JSON字符串。

        2.JSONArray常用方法说明如下:

                (1)length:获取JSONArray数组的长度。

                (2)getJSONObject:获取JSONArray数组在指定位置的JSONObject对象。

                (3)put:往JSONArray数组中添加一个JSONObject对象。

        示例代码如下,在页面布局文件中添加两个文本视图。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".InternetCommunication.JsonAnalyzeActivity"android:orientation="vertical"><TextViewandroid:id="@+id/textView_1"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/textView_2"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

        部分Java代码如下,定义一个JSON格式的字符串,通过JSONObject构造方法生成一个JSONObject对象实例,后调用多个方法获取JSON字符串中的数据。

public class JsonAnalyzeActivity extends AppCompatActivity {private final String TAG = "JsonAnalyzeActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_json_analyze);TextView textView_1,textView_2;textView_1 = findViewById(R.id.textView_1);textView_2 = findViewById(R.id.textView_2);String json = "{'name':'XiaoMing','age':18,'list':[{'one':1},{'two':2},{'three':3}]}";try {JSONObject jsonObject = new JSONObject(json);textView_1.setText("原始JSON:" + json);textView_2.setText(String.format("名字:%s\n年龄:%s\n数字:%d",jsonObject.getString("name"),jsonObject.getInt("age"),jsonObject.getJSONArray("list").getJSONObject(1).getInt("two")));}catch (Exception e){Log.d(TAG,e.getMessage());}}
}

        效果图如下,能够读取JSON字符串中的数据。

Gson库解析JSON

        上面的方法虽然可以解析JSON字符串,但做法较为麻烦且容易出错。对此可以使用谷歌公司推出的第三方库Gson来减少工作与错误。由于该库为第三方库,需要在模块的build.gradle中添加依赖,如下所示。

implementation "com.google.code.gson:gson:2.9.0"

        Gson常见的应用场合有两个,一个是将数据对象转化为JSON字符串,此时可以调用Gson中的方法toJson把指定的数据对象(该数据对象可以是自定义数据类型,下同)转为JSON字符串;另一个是从JSON字符串解析出数据对象,此时可以调用Gson中的方法fromJson把JSON字符串解析为指定类型的数据对象。示例代码如下,布局文件不变。在Java代码中自定义了UserInfo类并实例化该对象,将其作为数据对象。

public class JsonAnalyzeActivity extends AppCompatActivity {private final String TAG = "JsonAnalyzeActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_json_analyze);TextView textView_1,textView_2;textView_1 = findViewById(R.id.textView_1);textView_2 = findViewById(R.id.textView_2);Calendar calendar = Calendar.getInstance();String time = String.format("%s:%s:%s.%s",calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND),calendar.get(Calendar.MILLISECOND));UserInfo userInfo = new UserInfo("XiaoMing",18,"男",time);String json = new Gson().toJson(userInfo);textView_1.setText("原始JSON:" + json);UserInfo userInfo_t = new Gson().fromJson(json,UserInfo.class);String info = String.format("名字:%s\n年龄:%d\n性别:%s\n时间:%s",userInfo_t.Name,userInfo_t.Age,userInfo_t.gender,userInfo_t.time);textView_2.setText(info);}class UserInfo{private String Name;private int Age;private String gender;private String time;public UserInfo(String name,int age,String gender,String time){this.Name = name;this.Age = age;this.gender = gender;this.time = time;}}
}

        效果图如下,可以看到Gson两个方法的效果,Gson比原生的方法要更加方便,功能更多。

http://www.dtcms.com/a/516236.html

相关文章:

  • STM32H743-ARM例程26-TCP_CLIENT
  • 上海先进网站建设公司凡科网站教程
  • 【ffmpeg】win11 python 使用ffmpeg 切割音频
  • macOS环境安装jupyter notebook(极简版)
  • 04_线性回归
  • 自然语言处理实战——基于策略迭代算法的餐厅预订对话系统
  • PHP双轨直销企业会员管理系统/购物直推系统/支持人脉网络分销系统源码
  • 拼接“音频片段”生成完整文件
  • 电影视频网站建设费用wordpress搜索增强
  • 营销型网站建设ppt模板wordpress碎语插件
  • 灵活用工平台如何助力中小企业降本增效:案例分析
  • 【题解】P2216 [HAOI2007] 理想的正方形 [单调队列]
  • UE基础操作2
  • Java IDEA学习之路:第五、六周课程笔记归纳
  • 亚马逊云代理商:怎么使用AWS WAF?
  • 茂名建设企业网站建网站为什么要租空间
  • SOAP 实例详解
  • 【C++】多态深度解析:虚函数表与动态绑定的奥秘
  • 腾讯云网站建设教程企业名录app
  • 重庆做网站有哪些医疗网站建设
  • 语音识别技术之科大讯飞在线API
  • 从案例到实践:仓颉编程语言入门核心知识点全解析
  • VR环境中的概念
  • 闽侯县住房和城乡建设局官方网站猪八戒官网做网站专业吗
  • 十个app制作网站wordpress目录插件
  • PHP全电发票OFD生成实战
  • 利用DuckDB SQL求解集合数学题
  • 做新闻h5网站专业网站建设费用报价
  • 个人网站开发的环境海南省建设网站的公司电话号码
  • C++学习:C++11关于类型的处理