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

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

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

一、移动数据格式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>

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

相关文章
|
3月前
|
运维 Kubernetes 前端开发
如何用 eBPF 实现 Kubernetes 网络可观测性?实战指南
本文深入探讨了Kubernetes网络观测的挑战与eBPF技术的应用。首先分析了传统工具在数据碎片化、上下文缺失和性能瓶颈上的局限性,接着阐述了eBPF通过零拷贝观测、全链路关联和动态过滤等特性带来的优势。文章进一步解析了eBPF观测架构的设计与实现,包括关键数据结构、内核探针部署及生产环境拓扑。实战部分展示了如何构建全栈观测系统,并结合NetworkPolicy验证、跨节点流量分析等高级场景,提供具体代码示例。最后,通过典型案例分析和性能数据对比,验证了eBPF方案的有效性,并展望了未来演进方向,如智能诊断系统与Wasm集成。
107 1
|
4月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
|
3月前
|
机器学习/深度学习 移动开发 供应链
基于时间图神经网络多的产品需求预测:跨序列依赖性建模实战指南
本文展示了如何通过学习稀疏影响图、应用图卷积融合邻居节点信息,并结合时间卷积捕获演化模式的完整技术路径,深入分析每个步骤的机制原理和数学基础。
106 1
|
4月前
|
Android开发 开发者
Android企业级实战-界面篇-3
本文是《Android企业级实战-界面篇》系列的第三篇,主要介绍分割线和条形跳转框的实现方法,二者常用于设置和个人中心界面。文章通过具体代码示例展示了如何实现这两种UI组件,并提供了效果图。实现前需准备`dimens.xml`、`ids.xml`、`colors.xml`等文件,部分资源可参考系列第一、二篇文章。代码中详细说明了布局文件的配置,如分割线的样式定义和条形跳转框的组件组合,帮助开发者快速上手并应用于实际项目中。
|
4月前
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
231 5
|
3月前
|
机器学习/深度学习
解决神经网络输出尺寸过小的实战方案
在CIFAR10分类模型训练中,因网络结构设计缺陷导致“RuntimeError: Given input size: (256x1x1). Calculated output size: (256x0x0)”错误。核心问题是六层卷积后接步长为2的池化层,使特征图尺寸过度缩小至归零。解决方案包括调整池化参数(如将部分步长改为1)和优化网络结构(采用“卷积-卷积-池化”模块化设计)。两种方案均可消除报错,推荐方案二以平衡特征表达与计算效率。
|
4月前
|
XML Android开发 数据格式
Android企业级实战-界面篇-2
本文为《Android企业级实战-界面篇》系列第二篇,主要介绍三个UI模块的实现:用户资料模块、关注与粉丝统计模块以及喜欢和收藏功能模块。通过详细的XML代码展示布局设计,包括dimens、ids、colors配置文件的使用,帮助开发者快速构建美观且功能齐全的界面。文章结合实际效果图,便于理解和应用。建议配合第一篇文章内容学习,以获取完整工具类支持。
|
4月前
|
算法 Java Android开发
Android企业级实战-界面篇-1
本文详细介绍了Android企业级开发中界面实现的过程,涵盖效果展示、实现前准备及代码实现。作者通过自身经历分享了Android开发经验,并提供了`dimens.xml`、`ids.xml`、`colors.xml`和`strings.xml`等配置文件内容,帮助开发者快速构建规范化的UI布局。文章以一个具体的用户消息界面为例,展示了如何使用线性布局(LinearLayout)和相对布局(RelativeLayout)实现功能模块排列,并附带注意事项及使用方法,适合初学者和进阶开发者参考学习。
|
27天前
|
JSON API 数据格式
淘宝/天猫图片搜索API接口,json返回数据。
淘宝/天猫平台虽未开放直接的图片搜索API,但可通过阿里妈妈淘宝联盟或天猫开放平台接口实现类似功能。本文提供基于淘宝联盟的图片关联商品搜索Curl示例及JSON响应说明,适用于已获权限的开发者。如需更高精度搜索,可选用阿里云视觉智能API。
|
25天前
|
JSON API 数据安全/隐私保护
深度分析淘宝卖家订单详情API接口,用json返回数据
淘宝卖家订单详情API(taobao.trade.fullinfo.get)是淘宝开放平台提供的重要接口,用于获取单个订单的完整信息,包括订单状态、买家信息、商品明细、支付与物流信息等,支撑订单管理、ERP对接及售后处理。需通过appkey、appsecret和session认证,并遵守调用频率与数据权限限制。本文详解其使用方法并附Python调用示例。

热门文章

最新文章