android: 用gson解析json字符串

一,安装第三方库gson

地址:

https://mvnrepository.com/artifact/com.google.code.gson/gson

build.gradle中dependencies添加:

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

然后点击 Sync Now

二,代码:

1,json代码:

2,数据类代码:

UserListEntity.java

package com.example.okdemo1.model;

import java.util.List;

public class UserListEntity {
    private int code;
    private String status;
    private String time;
    private String msg;
    private Data data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Data getData() {
        return data;
    }

    public void setData(Data data) {
        this.data = data;
    }

    public class Data {
        private List<UserListItemEntity> list;

        public List<UserListItemEntity> getList() {
            return list;
        }

        public void setLabel(List<UserListItemEntity> list) {
            this.list = list;
        }
    }
}

UserListItemEntity.java

package com.example.okdemo1.model;

public class UserListItemEntity {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3,解析代码:

package com.example.okdemo1;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.example.okdemo1.model.UserListEntity;
import com.example.okdemo1.model.UserListItemEntity;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //给按钮增加点击事件
        Button myButton = findViewById(R.id.apibutton);
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 处理点击事件
                doGetData();
             }
        });
    }

    //以get方式访问互联网上的页面,并返回数据
    private void doGetData() {
        Toast.makeText(MainActivity.this, "按钮被点击了!", Toast.LENGTH_LONG).show();
        //1.创建HttpClient对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //2.获取request对象
        Request.Builder builder = new Request.Builder().url("http://www.test.net/json.php");
        Request request = builder.build();
        //3.异步请求发起
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                try {
                    String result = response.body().string();
                    //解析json到entity对象中

                    //如果需要更新主线程的 UI 如果使用 rxjava 以及 retrofit 就不用这样处理了
                    System.out.println("网络请求返回结果:");
                    System.out.println(result);

                    Gson gson = new Gson();
                    UserListEntity person = gson.fromJson(result, UserListEntity.class);
                    System.out.println("解析后status:");
                    System.out.println(person.getStatus());
                    System.out.println("解析后code:");
                    System.out.println(person.getCode());
                    List<UserListItemEntity> list = person.getData().getList();
                    //遍历list下的元素;
                    for (int i = 0; i < list.size(); i++) {
                        UserListItemEntity one = list.get(i);
                        System.out.println(one.getId());
                        System.out.println(one.getName());
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });
    }
}

三,测试效果:

posted @ 2025-04-26 08:44  刘宏缔的架构森林  阅读(107)  评论(0)    收藏  举报