android: retrofit库返回时接口使用泛型解析数据

一,代码:

接口返回的json格式

接口类

package com.example.okdemo1.interfaces;

import com.example.okdemo1.model.BaseEntity;
import com.example.okdemo1.model.UserListEntity;

import retrofit2.Call;
import retrofit2.http.GET;

public interface ApiServiceInterface {
    @GET("/json.php")
    Call<BaseEntity<UserListEntity>> getUserList();

}

三个model

通用model,不确定数据类型,使用泛型

package com.example.okdemo1.model;

public class BaseEntity<T> {
    private int code;
    private String status;
    private String time;
    private String msg;
    private T 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 T getData() {
        return data;
    }

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

}

当前页面model

package com.example.okdemo1.model;

import java.util.List;

public class UserListEntity {

    //第几页
    //private int page;

    //数据列表
    private List<UserListItemEntity> list;

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

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

}

列表项model

package com.example.okdemo1.model;

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

    public UserListItemEntity(int id, String name, String image) {
        this.id = id;
        this.name = name;
        this.image = image;
    }

    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;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

实际使用时的代码:

package com.example.okdemo1.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

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

import com.example.okdemo1.MainActivity;
import com.example.okdemo1.R;
import com.example.okdemo1.interfaces.ApiServiceInterface;
import com.example.okdemo1.model.BaseEntity;
import com.example.okdemo1.model.UserListEntity;
import com.example.okdemo1.model.UserListItemEntity;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ApiActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_api);

        //给按钮增加点击事件
        Button button2 = findViewById(R.id.apiBtn);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 //访问接口
                request();
            }
        });
    }

    //retrofit2 请求方法
    public void request() {

        //创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.testit.net") // 设置 网络请求 Url
                .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
                .build();

        //创建 网络请求接口 的实例
        ApiServiceInterface request = retrofit.create(ApiServiceInterface.class);

        //对 发送请求 进行封装
        Call<BaseEntity<UserListEntity>> call = request.getUserList();

        //发送网络请求(异步)
        call.enqueue(new Callback<BaseEntity<UserListEntity>>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<BaseEntity<UserListEntity>> call, Response<BaseEntity<UserListEntity>> response) {
                //处理返回的数据结果

                List<UserListItemEntity> list = response.body().getData().getList();
                //遍历list数据
                for (int i = 0; i < list.size(); i++) {
                    UserListItemEntity one = list.get(i);
                    //对元素进行操作
                    String image = one.getImage();
                    System.out.println("one:"+one.getId()+"-"+one.getName()+"-"+image);
                }
            }

            //请求失败时回调
            @Override
            public void onFailure(Call<BaseEntity<UserListEntity>> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });
    }
}

二,测试效果:

posted @ 2025-06-14 15:22  刘宏缔的架构森林  阅读(62)  评论(0)    收藏  举报