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("连接失败");
}
});
}
}