代码之家  ›  专栏  ›  技术社区  ›  Lakindu Akash

获取不同类型的JSON响应更新

  •  0
  • Lakindu Akash  · 技术社区  · 8 年前

    我有RESTAPI,它在同一路径上根据当前状态响应。我们假设 /api/users 回答

    {
      "status":200,
      "error":false,
      "users":["a","b"]
    } 
    

    如果用户获得授权。 否则,如果用户未获得授权,则应使用 {"status":403,"error":true,"redirect":"url"} .在为API调用定义接口时,需要准确的响应对象类型。

    前任:

    @GET("users")
    Call<List<User>> getUsers()
    

    但在这里,API服务器使用不同形状的对象进行响应。如何处理这种情况?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Rohit5k2    8 年前

    基于意见的回答

    基类

    public class BaseResponse{
        int status;
        String error;
        ...
        ...
    }
    

    成功响应类

    public class SuccessResponse extends BaseResponse{
        String[] users;
        ...
        ...
    }
    

    故障响应类

    public class FailureResponse extends BaseResponse{
        String redirect;
        ...
        ...
    }
    

    API接口

    @GET("users")
    Call<BaseResponse> getUsers()
    

    数据到达时

    if(response.code == 200)
        // Parse with SuccessResponse Class
    else
        // Parse with FailureResponse class
    
        2
  •  0
  •   rituparna    8 年前

    使用这个类作为您的模型pojo

    public class User {
    
    @SerializedName("status")
    @Expose
    private int status;
    @SerializedName("error")
    @Expose
    private String error;
    @SerializedName("users")
    @Expose
    private String users;
    
    public int getStatus() {
        return status;
    }
    
    public void setStatus(int status) {
        this.status = status;
    }
    
    public String getError() {
        return error;
    }
    
    public void setError(String error) {
        this.error = error;
    }
    
    public String getUsers() {
        return users;
    }
    
    public void setUsers(String users) {
        this.users = users;
    }
    

    }

    在你的改型中把这个型号叫做…

    Call<List<User>> res = BaseUrlClass.yourInterfaceHere().getUsers();
        res.enqueue(new Callback<List<User>>() {
            @Override
            public void onResponse(Call<List<User>> call, Response<List<User>> response) {
                int stat;
                String err,uuser;
                List<User> a = response.body();
               for(int i = 0;i<a.size;i++){
                      User u = a.get(i);
                       stat = u.getStatus();
                       err = u.getError();
                       uuser = u.getUsers();
    
                if(stat == 200){
                       //do this
                  } else{
                        //do this
                      }
            }
    
            @Override
            public void onFailure(Call<List<User>> call, Throwable t) {
    
            }
        });