我正在使用 retrofit 从我的 API 接收 JSON 数据。当数据包含单个对象时,我能够接收 JSON 数据。但是,当我尝试获取所有员工的列表时,出现错误。
/api/Employee/1 的 JSON 数据(工作正常):
{
"id": 10,
"name": "Arpit",
"number": "7777777777",
"city": "noida",
"depid": 4,
}
获取此 JSON 对象的代码正在运行。 PFB代码。
retrofit 代码:
public void onResponse(Response<EmployeeResponse> response, Retrofit retrofit) {
if (response.raw().toString()!=null) {
Employee e = new Employee();
e.setId(response.body().id);
e.setName(response.body().name);
e.setCity(response.body().city);
e.setNumber(response.body().number);
Log.d("employee details", e.toString());
list.add(e);
rv.setAdapter(new SimpleItemRecyclerViewAdapter(list));
}
else
Log.d("No data recieved",response.raw().toString());
}
@Override
public void onFailure(Throwable t) {
Log.d("Fail",t.getMessage());}
员工API.java
public interface EmployeeAPI {
@GET("/assignment1/api/Employee/1")
Call<EmployeeResponse> load_employee();}
员工响应.java
public class EmployeeResponse {
@SerializedName("id")
public String id;
@SerializedName("name")
public String name;
@SerializedName("city")
public String city;
@SerializedName("number")
public String number;}
但是,当我尝试从/api/Employee 获取所有员工的列表时,出现以下错误:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
api/Employee 的 JSON 数据是 ():
[
{
"id":10,
"name":"Arpit Jain",
"number":"7777777777",
"city":"noida",
"depid":4,
},
{
"id":32,
"name":"Ish Chawla",
"number":"9999999999",
"city":"Noida",
"depid":1,
},
{
"id":39,
"name":"Laxman",
"number":"6666666666",
"city":"GZB",
"depid":1,
},
{
"id":44,
"name":"Ishan",
"number":"9839060055",
"city":"Kanpur",
"depid":3,
}
]
获取员工列表的代码是:
改造代码
public void onResponse(Response<EmployeeResponse> response, Retrofit retrofit) {
if (response.raw().toString()!=null) {
Log.d("employee details", response.body().toString());
list = response.body().list;
rv.setAdapter(new SimpleItemRecyclerViewAdapter(list));
}
else
Log.d("No data recieved",response.raw().toString());
}
@Override
public void onFailure(Throwable t) {
Log.d("Fail",t.getMessage());
}
员工API.java
public interface EmployeeAPI {
@GET("/assignment1/api/Employee")
Call<EmployeeResponse> load_employee();
}
员工响应.java
public class EmployeeResponse {
public ArrayList<Employee> list;
}
请告诉我正确获取数据所需的更改。
最佳答案
这是因为您正在获取整个员工列表及其数组。
public interface EmployeeAPI {
@GET("/assignment1/api/Employee")
Call<Employee[]> load_employee();
@GET("/assignment1/api/Employee/1")
Call<Employee> load_employee();
}
并且不要创建 EmployeeResponse 类。在 Employee pojo 类中使用 @SerializedName。
得到回应后
if (response.raw().toString()!=null) {
Employee e = new Employee();
e.setId(response.body().id);
e.setName(response.body().name);
e.setCity(response.body().city);
e.setNumber(response.body().number);
Log.d("employee details", e.toString());
list.add(e);
rv.setAdapter(new SimpleItemRecyclerViewAdapter(list));
}
不需要设置这个。
关于android - Retrofit 在发出 GET 请求时返回空响应体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43084763/