android - Retrofit 在发出 GET 请求时返回空响应体

标签 android json retrofit retrofit2

我正在使用 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/

相关文章:

android从数据库中分离表格的行

Android GridView 选中项背景

android - 如果我只需要一个 webview,PhoneGap 是不是太多了?

java - 基于决策的结果的 REST 资源建模

json - 将元数据添加到 jsTree

android - 如何在 AS 4.0 中使用 Retrofit 的挂起功能并启用组合?

android - 为什么 Retrofit @Path 没有被替换?

android - 如何从手机中检索代理信息? android.net.Proxy.getPort 不工作

c# - 在 asp.net mvc3 中使用 JsonResult 操作的用例是什么?

android - 预期为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ - Retrofit 2 Android 中为 BEGIN_OBJECT