改造中如何处理两种不同的响应

Don*_*ive 2 android json jsonschema2pojo retrofit2

我按照此步骤使用Retrofit2发布数据

我使用JSON POJO解析POST和GET文件

因此,如果记录中的数据存在,我将得到这种响应

{
"status": "200",
"response": [{
        "cnt_id": "201",
        "phn_no": "3251151515",
        "dat_cnt": "Reset Password request Said to Mail"
    },
    {
        "cnt_id": "209",
        "phn_no": "555465484684",
        "dat_cnt": "Hi DEMO User , Congratulations! Your account has been created successfully."
    },
    {
        "cnt_id": "210",
        "phn_no": "4774748",
        "dat_cnt": "Hi XYZ , Congratulations! Your account has been created successfully."
    }
]
}
Run Code Online (Sandbox Code Playgroud)

如果没有数据,我会得到

{"status":"204","response":{"msg":"No Content"}}
{"status":"400","response":{"msg":"BadRequest"}}
{"status":"401","response":{"msg":"Unauthorized User"}}

所以在这里我可以解析状态200中的数据,但是当状态不等于200时我要处理它们

我尝试过

   status = response.body().getStatus();
   if(status.equals("200")) {
      List<Response> resList =  response.body(). getResponse();

            for(int i = 0; i<resList.size(); i++)
            {.
             .
              ..
             .
            }
        }

        else {
             //not Implemented
             }
Run Code Online (Sandbox Code Playgroud)

现在我应该写些什么,我在POJO中使用了不等于200的响应数据,但我在索要列表

更新资料

com.example.Example.java

public class Example {
    @SerializedName("status") @Expose private String status;
    @SerializedName("response") @Expose private List<Response> response = null;
}        
Run Code Online (Sandbox Code Playgroud)

com.example.Response.java

public class Response {
    @SerializedName("cnt_id") @Expose private String cntId;
    @SerializedName("phn_no") @Expose private String phnNo;
    @SerializedName("dat_cnt") @Expose private String datCnt;
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*shi 5

public class Example {
    @SerializedName("status") @Expose private String status;
    @SerializedName("response") @Expose private Object response = null;
}

public class Response {
    @SerializedName("cnt_id") @Expose private String cntId;
    @SerializedName("phn_no") @Expose private String phnNo;
    @SerializedName("dat_cnt") @Expose private String datCnt;
}

public class ResponseError{
    @SerializedName("msg") @Expose private String msg;
}
Run Code Online (Sandbox Code Playgroud)

而且您的callBack方法应该像

new Callback<Example>() {
            @Override
            public void onResponse(Call<Example> call, Response<Example> response) {
                if(response.isSuccessful()){
                    Example example = response.body();
                    Gson gson = new GsonBuilder().create();
                    if(example.status.equals("200")) {
                        TypeToken<List<Response>> responseTypeToken = new TypeToken<List<Response>>() {};
                        List<Response> responseList = gson.fromJson(gson.toJson(example.getResponse()), responseTypeToken.getType());
                    } else {
                        //If for everyOther Status the response is Object of ResponseError which contains msg.
                        ResponseError responseError = gson.fromJson(gson.toJson(example.getResponse()), ResponseError.class);
                    }
                }
            }

            @Override
            public void onFailure(Call<Example> call, Throwable t) {
                //Failure message
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • 使用 kotlins 协程而不是回调时,是否还有一种方法可以处理两个不同的响应? (3认同)