Android Studio App开发之网络通信中移动数据格式JSON的讲解以及实战(附源码 超详细必看)

news2025/3/3 5:48:29

运行有问题或需要源码请点赞关注收藏后评论区留言~~~

一、移动数据格式JSON

网络通信的交互数据格式有两大类,分别是JSON和XML,前者短小精悍,后者表现力丰富,对于App来说,基本采用JSON格式与服务器通信。一是手机流量很贵,表达同样的信息,JSON串比XML串短很多,在节省流量方面有优势,另一个是JSON串解析的更快也更省电,XML不但慢而且耗电,于是JSON格式成了移动端事实上的网络数据格式标准

二、JSON格式和方法

JSON基本格式定义如下

1:整个JSON串由一对花括号包裹,并且内部的每个结构都以花括号包起来

2:参数格式类似键值对,其中键名与键值之间以冒号凤娥

3:两个键值对之间以逗号分割

4:键名需要用双引号括起来,键值为数字的话则不需要双引号,为字符串则需要引号

5:JSON数组通过方括号表达,方括号内部依次罗列各个元素

针对JSON字符串 Android提供 了JSON解析工具,支持对JSON对象和JSON数组的解析处理

JSONObject常用方法如下

1:JSONObject构造函数 构造一个对象

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

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

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

5:getJSONArray 获取指定名称的JSONArray数组对象

JSONArray常用方法如下

1:length 获取数组长度

2:getJSONObject 获取数字在指定位置的对象

3:put 往数字中加入一个对象 

我们需要在build.gradle模块中引入Gson支持库 加入以下代码即可

 implementation'com.google.code.gson:gson:2.8.6'

 Gson常见的应用场合如下

1:将数据对象转换为JSON字符串

2:从JSON字符串解析出数据对象

实战效果如下

点击不同按钮后可以在JSON字符串和转换后的数据之间查看

 

 

 代码如下

Java类

package com.example.chapter14;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.chapter14.bean.UserInfo;
import com.google.gson.Gson;

@SuppressLint(value={"DefaultLocale","SetTextI18n"})
public class JsonConvertActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tv_json; // 声明一个文本视图对象
    private UserInfo mUser; // 声明一个用户信息对象
    private String mJsonStr; // JSON格式的字符串

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json_convert);
        mUser = new UserInfo("阿四", 25, 165L, 50.0f); // 创建用户实例
        mJsonStr = new Gson().toJson(mUser); // 把用户实例转换为JSON串
        tv_json = findViewById(R.id.tv_json);
        findViewById(R.id.btn_origin_json).setOnClickListener(this);
        findViewById(R.id.btn_convert_json).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_origin_json) {
            mJsonStr = new Gson().toJson(mUser); // 把用户实例转换为JSON字符串
            tv_json.setText("JSON串内容如下:\n" + mJsonStr);
        } else if (v.getId() == R.id.btn_convert_json) {
            // 把JSON串转换为UserInfo类型的对象
            UserInfo newUser = new Gson().fromJson(mJsonStr, UserInfo.class);
            String desc = String.format("\n\t姓名=%s\n\t年龄=%d\n\t身高=%d\n\t体重=%f",
                    newUser.name, newUser.age, newUser.height, newUser.weight);
            tv_json.setText("从JSON串解析而来的用户信息如下:" + desc);
        }
    }

}

用户类

package com.example.chapter14.bean;

public class UserInfo {
	public String name; // 姓名
	public int age; // 年龄
	public long height; // 身高
	public float weight; // 体重
	
	public UserInfo(String name, int age, long height, float weight) {
		this.name = name;
		this.age = age;
		this.height = height;
		this.weight = weight;
	}
}

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_origin_json"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="原始JSON串"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <Button
            android:id="@+id/btn_convert_json"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="转换JSON串"
            android:textColor="@color/black"
            android:textSize="17sp" />
    </LinearLayout>

    <TextView
        android:id="@+id/tv_json"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:text="这里查看JSON串的构造和解析结果"
        android:textColor="@color/black"
        android:textSize="17sp" />

</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络的常见面试题

GET 和 POST 的区别 作用 GET用来获取资源&#xff0c;POST用于传输实体主体 参数位置 GET的参数放在URL中&#xff0c;POST的参数存储在实体主体中&#xff0c;并且GET方法提交的请求的URL中的数据多是2048字节&#xff0c;POST请求没有大小限制 安全性 GET方法因为参数放在…

二极管:Irush与我相干!

故事还没结束,我们必须继续讲,继续挖,边说边究。 即使时间us级不会让FUSE同学Open,FUSE后面的兄弟姐妹呢,可以扛住事吗?那可有3.4A的能量冲击啊! 不确定,就有可能。墨菲老人家曾说过:会出错的事总会出错。也就是会发生的事总会发生,只要不给时间加上一个期限,非要给…

外卖项目03---分类管理业务开发

目录 一、公共字段自动填充 41 1.1问题分析 41 ​编辑1.2公共字段自动填充---代码实现并测试 42 1.3公共字段自动填充---功能完善 43 二、新增分类 44 2.1需求分析 44 三、分类信息查询 45 3.1需求分析 45 3.2代码开发 流程分析 四、删除分类 46 4.1需求分析 46 4.2…

教你打造高性能的 Go 缓存库

我在看一些优秀的开源库的时候看到一个有意思的缓存库 fastcache&#xff0c;在它的介绍主要有以下几点特点&#xff1a; 读写数据要快&#xff0c;即使在并发下&#xff1b;即使在数 GB 的缓存中&#xff0c;也要保持很好的性能&#xff0c;以及尽可能减少 GC 次数&#xff1…

基于Fluent求解器进行二次开发到底怎么做?

作者 | 小田老师 Ansys Fluent软件作为通用的流体仿真软件&#xff0c;功能模型虽然多而全&#xff0c;但是缺乏相应的行业专业性。同时仿真分析具有一定的技术门槛&#xff0c;既需要技术人员具备行业基础&#xff0c;也需要积累相关仿真经验&#xff0c;对软件操作要有较高的…

Docker安装Redis

文章目录1.Docker搜索Redis镜像2.Docker拉取镜像3.Docker挂载配置文件4.启动Redis 容器5.测试Redis6.Docker删除Redis1.Docker搜索Redis镜像 命令&#xff1a;docker search <镜像名称> docker search redis可以看到有很多redis的镜像&#xff0c;此处因没有指定版本&…

干货|数据安全治理白皮书4.0(文末附下载链接)

数据安全治理白皮书是国内最早的数据安全治理白皮书系列&#xff0c;围绕数据安全治理&#xff0c;“新理论、新技术、新实践”&#xff0c;一次系统汇总、梳理分析与集中呈现&#xff0c;2018年-2021年&#xff0c;已发布1.0/2.0/3.0三个版本&#xff0c;2022年&#xff0c;已…

线性二分类的实现

神经网络结构 从视觉上判断是线性可分的&#xff0c;使用单层神经网络&#xff1b; 输入层设置两个输入单元&#xff0c;表示经纬度&#xff1a;&#x1d44b;&#x1d465;1,&#x1d465;2 输出层设置一个单元&#xff0c;表示地盘所属阵营&#xff1a; &#x1d467;&…

STC15W单片机防丢语音报警GPS北斗定位测距双机LORA无线手持可充电

实践制作DIY- GC0091-防丢语音报警 一、功能说明&#xff1a; 基于STC15W单片机设计-防丢语音报警 功能介绍&#xff1a; 主机硬件&#xff1a; STC15W4K48S4&#xff08;或者STM32F103CxT6&#xff09;系列最小系统板OLED显示器LORA无线通讯模块GPS北斗双模定位模块蜂鸣器…

RGD环肽:环六肽c(GRGDSP),CAS号: 135432-37-0

c(GRGDSP)是一个环RGD肽。刺激大鼠传入小动脉的收缩。已用于顺铂的靶向给药。结果表明&#xff0c;c(RGDSP)可抑制小鼠B16黑色素瘤细胞在纤连蛋白包被孔上的粘附。 编号: 194990中文名称: RGD环肽&#xff1a;环六肽c(GRGDSP)英文名: cyclo(GRGDSP)CAS号: 135432-37-0单字母: c…

电子统计台账:中文标记月度流水账格式数据的转换,以及过滤模板的普遍适配性

上一个例子展示的台账格式中&#xff0c;月份是阿拉伯数字。本文试着转换中文月份格式的台账数据。 1 新建项目 新建一个项目“测试06_工业生产_中文月度流水账_202101”。 切换到2021年1月。 2 打开数据源文件 打开2个企业数据源文件&#xff1a; 6流水账式中文月份M_1-…

go pprof 实战

为什么要进行性能优化 哪些情况需要进行性能优化 其实关于性能优化的主题&#xff0c;网上已经讨论很多次&#xff0c;这里谈一下我的理解&#xff0c;那么其实核心就是 2 个点&#xff1a; 服务一直高负载&#xff0c;业务增长需要经常扩容架构不能满足业务发展&#xff0c…

[附源码]java毕业设计基于的考研408课程学习平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里云产品经理刘宇:Serverless 的前世今生

2022 年 9 月 24 日&#xff0c;阿里云用户组&#xff08;AUG&#xff09;第 12 期活动在厦门举办。活动现场&#xff0c;阿里云 Serverless 产品经理刘宇&#xff0c;向参会企业代表分享了Serverless 架构的前世今生。本文根据演讲内容整理而成&#xff0c;希望和大家一起探索…

基于SSM花卉商城设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

商业智能BI,助力企业数据文化建设

当今&#xff0c;互联网技术飞速发展&#xff0c;我们每天都在接收者来自各方面的海量信息&#xff0c;这样一个信息爆炸的时代&#xff0c;企业如何看待数据、整理数据、利用数据&#xff0c;又如何从这些数据中发掘出有效的信息&#xff0c;成为企业新的生存技能之一。 数据…

QT -- 多线程 —— moveToThread

视频教程链接&#xff1a; https://www.bilibili.com/video/BV1fL4y1V7QP/?spm_id_from333.880.my_history.page.click&vd_sourceb91967c499b23106586d7aa35af46413 moveToThread函数的功能&#xff1a;给多个任务&#xff08;比如显示多个界面&#xff09;各分配一个线程…

基金交易场景下,如何利用 Apache APISIX 来稳固 API 安全

王晔倞&#xff0c;Apache APISIX Committer&#xff0c;公众号「头哥侃码」作者。 背景介绍 金融领域的企业中&#xff0c;安全是非常重中之重的因素。 通常各类金融企业都会花费大量成本去采购安全相关的设备和硬件&#xff0c;基金管理相关企业更是如此。 根据相关国内基金…

在window和Linux上使用docker安装RocketMQ

1.创建namesrv服务 拉取镜像 docker pull rocketmqinc/rocketmq:latest启动 namesrv docker run -d -p 9876:9876 -v D:/programCoding/Docker/rocketmq/namesrv/logs:/root/logs -v D:/programCoding/Docker/rocketmq/namesrv/store:/root/store --name rmqnamesrv -e &quo…

信息论随笔(二)信息熵及其性质

回顾 上次讲到自信息量&#xff0c;也就是用来表示一个发生概率为p的事件含有的信息量&#xff0c;或者说不确定度。一个事件的发生的概率越小&#xff0c;它的不确定度越大&#xff0c;含有的信息量也就越大。 信息熵 那么如何来衡量一个系统&#xff08;多个事件以不同的概…