Android解析JSON格式数据的两种方式(JSONObject和Gson)

yizhihongxing

下面是Android解析JSON格式数据的两种方式的完整攻略。

一、使用JSONObject解析JSON数据

1. 引入相关依赖

下面是需要引入的三个依赖:

implementation 'com.android.volley:volley:x.x.x'
implementation 'org.json:json:x.x.x'

2. 创建一个JSON请求

创建一个JSON请求需要一个URL地址和一个Response.Listener<JSONObject>类型的监听器。当请求成功时,Volley会调用这个监听器并返回一个JSON对象。

String url = "https://jsonplaceholder.typicode.com/todos/1";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Request.Method.GET ,
    url ,
    null ,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            // 处理返回的JSON数据
        }
    } ,
    null
);

3. 处理返回的JSON数据

当请求成功时,Volley会调用上面创建的监听器。在这个监听器的onResponse方法中,我们就可以处理返回的JSON数据了。

// JSON数据结构:
// {
//   "userId": 1,
//   "id": 1,
//   "title": "delectus aut autem",
//   "completed": false
// }

try {
    int userId = response.getInt("userId");
    int id = response.getInt("id");
    String title = response.getString("title");
    boolean completed = response.getBoolean("completed");
    Log.d("MainActivity", "userId: " + userId);
    Log.d("MainActivity", "id: " + id);
    Log.d("MainActivity", "title: " + title);
    Log.d("MainActivity", "completed: " + completed);
} catch (JSONException e) {
    e.printStackTrace();
}

实例演示

String url = "https://jsonplaceholder.typicode.com/todos/1";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Request.Method.GET ,
    url ,
    null ,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                int userId = response.getInt("userId");
                int id = response.getInt("id");
                String title = response.getString("title");
                boolean completed = response.getBoolean("completed");
                Log.d("MainActivity", "userId: " + userId);
                Log.d("MainActivity", "id: " + id);
                Log.d("MainActivity", "title: " + title);
                Log.d("MainActivity", "completed: " + completed);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    } ,
    null
);

RequestQueue queue = Volley.newRequestQueue(this);
queue.add(jsonObjectRequest);

二、使用Gson解析JSON数据

1. 引入相关依赖

使用Gson解析JSON数据需要引入以下依赖:

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

2. 创建一个JSON请求

创建JSON请求的过程同上面所讲的JSONObject解析JSON数据的方式。

3. 解析返回的JSON数据

在创建JSON请求时,我们需要传入一个Response.Listener<JSONObject>类型的监听器。但是,在使用Gson解析JSON数据时,我们需要传入一个Response.Listener<T>类型的监听器(其中T表示我们定义的Java类)。

String url = "https://jsonplaceholder.typicode.com/todos/1";
GsonRequest<Todo> gsonRequest = new GsonRequest<Todo>(
    Request.Method.GET ,
    url ,
    Todo.class ,
    new Response.Listener<Todo>() {
        @Override
        public void onResponse(Todo response) {
            // 处理返回的JSON数据
        }
    } ,
    null
);

我们可以先定义一个与返回的JSON数据结构对应的Java类。在上面的代码中,我们传入的是Todo.class,即我们定义的Todo类。

public class Todo {
    private int userId;
    private int id;
    private String title;
    private boolean completed;
    // 具体的getters和setters省略
}

然后在监听器的onResponse方法中,我们就可以直接使用返回的Todo对象了。

Todo todo = response;
Log.d("MainActivity", "userId: " + todo.getUserId());
Log.d("MainActivity", "id: " + todo.getId());
Log.d("MainActivity", "title: " + todo.getTitle());
Log.d("MainActivity", "completed: " + todo.isCompleted());

实例演示

String url = "https://jsonplaceholder.typicode.com/todos/1";
GsonRequest<Todo> gsonRequest = new GsonRequest<Todo>(
    Request.Method.GET ,
    url ,
    Todo.class ,
    new Response.Listener<Todo>() {
        @Override
        public void onResponse(Todo response) {
            Todo todo = response;
            Log.d("MainActivity", "userId: " + todo.getUserId());
            Log.d("MainActivity", "id: " + todo.getId());
            Log.d("MainActivity", "title: " + todo.getTitle());
            Log.d("MainActivity", "completed: " + todo.isCompleted());
        }
    } ,
    null
);

RequestQueue queue = Volley.newRequestQueue(this);
queue.add(gsonRequest);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android解析JSON格式数据的两种方式(JSONObject和Gson) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringBoot Security密码加盐实例

    下面是关于 “SpringBoot Security密码加盐实例” 的详细攻略。 介绍 Spring Security 是一个强大的身份认证和授权框架,Spring Boot 的集成让我们可以非常方便地搭建安全的应用。但是,如果我们对密码进行单纯的 hash 加密,容易被暴力破解,因此需要加盐(salt)使其更加安全。 盐是在密码加密的时候添加到原始密码中的…

    Java 2023年6月3日
    00
  • Java编译错误信息提示java.lang.ExceptionInInitializer解决

    当在Java程序中执行某些任务时,可能会出现以下类型的错误信息提示之一:“java.lang.ExceptionInInitializerError”。通常,该错误信息提示表明在执行静态初始化期间发生了异常。 为了解决Java编译错误信息提示“java.lang.ExceptionInInitializerError”,可以遵循以下步骤: 检查错误的详细信息…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“RuntimeException”的原因与解决方法

    “ReflectiveOperationException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的方法:如果方法无效,则可能会出现此错误。在这种情况下,需要检查方法以解决此问题。 无效的参数:如果参数无效,则可能会出现此错误。在这种情况下,需要检查参数以解决此问题。 以下是两个实例: 例1 如果方法无效,则…

    Java 2023年5月5日
    00
  • Java 数组交集的实现代码

    下面是Java数组交集的实现代码完整攻略。 实现思路 交集是指两个集合中都存在的元素,可以用两种方法来实现数组交集。 嵌套循环:在第一个数组中循环遍历每个元素,在第二个数组中再循环遍历每个元素,如果两个元素相等,则为交集元素之一。 HashSet数据结构:使用HashSet将第一个数组中的元素都添加进去,然后遍历第二个数组,在HashSet中查找是否存在相同…

    Java 2023年5月26日
    00
  • 一次说透,4大服务性幂等场景架构设计方案!

    服务幂等性架构设计 作者: 博学谷狂野架构师 GitHub:GitHub地址 (有我精心准备的130本电子书PDF) 只分享干货、不吹水,让我们一起加油!? 防重表实现幂等 对于防止数据重复提交,还有一种解决方案就是通过防重表实现。 防重表的实现思路也非常简单,首先创建一张表作为防重表,同时在该表中建立一个或多个字段的唯一索引作为防重字段,用于保证并发情况下…

    Java 2023年4月25日
    00
  • java向mysql插入数据乱码问题的解决方法

    Java 向 MySQL 插入数据时出现乱码问题是比较常见的问题,这是因为 Java 默认使用的字符集编码和 MySQL 默认的字符集编码不一致所导致的。下面是解决方法的完整攻略。 一、理解字符集编码 字符集编码是指用来表示字符在计算机中的二进制数据集合,是一种规范。计算机要读取和处理文本,必须将字符集编码转换成二进制数据,才能传递给计算机处理。常用的字符集…

    Java 2023年5月20日
    00
  • Spring开发核心之AOP的实现与切入点持久化

    Spring开发核心之AOP的实现与切入点持久化 什么是AOP 将一个大的功能划分为小的功能单元,然后将这些小的功能进行组合,就构成了一个完整的大功能。在划分功能单元的时候,要考虑到它们的通用性。这种技术称为模块化设计,也称为面向切面编程(AOP) AOP的实现 Spring中AOP的实现主要是通过动态代理的方式来实现的。Spring可以为普通的类以及接口生…

    Java 2023年5月20日
    00
  • Java重写(Override)与重载(Overload)区别原理解析

    下面是详细讲解“Java重写(Override)与重载(Overload)区别原理解析”的攻略: Java重写(Override)与重载(Overload)区别原理解析 一、重写(Override) 1.1 定义 Java中,当子类继承父类时,如果子类需要覆盖(重写)父类中的方法,就需要使用重写。重写是指在子类中重新定义的方法覆盖在父类中定义的同名方法。 1…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部