处理成功和失败改造的 2 个不同的错误响应2
handle 2 different error response for success and failer retrofit2
我目前的成功响应是这样的:
{"status":"success","message":"msg here"}
代码 200
我的错误响应是这样的:
{"status":"failure","message":"There was a validation error","errors":{"shippingAddress":{"phoneNumber":"Please enter a valid phone number"}}}
代码 400
我的问题是下面的代码不起作用,因为它总是在 onFailure() 中运行
if (response.isSuccessful()) {
// do something
} else if (response.code() == 400) {
Gson gson = new Gson();
ErrorPhone message = null;
if (response.errorBody() != null) {
message = gson.fromJson(response.errorBody().charStream(), ErrorPhone.class);
}
if (message != null) {
Toast.makeText(context, message.getErrors().getShippingAddress().getPhoneNumber(), Toast.LENGTH_LONG).show();
} else {
String errors = "";
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
errors = jObjError.getJSONObject("errors").getJSONObject("shippingAddress").getString("phoneNumber");
} catch (JSONException | IOException e) {
e.printStackTrace();
}
if (!errors.equals("")) {
Toast.makeText(context, errors, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, response.message(), Toast.LENGTH_LONG).show();
}
}
}
在 onFailure 内部我不能听 errorBody 来处理响应
使用名为 onResponse
的 Retrofit 接口并将您的 代码 放在那里。由于 Retrofit 使用两种不同的 callback
方法来处理网络请求的两种可能结果:失败 或 成功请求。 Retrofit 会根据结果调用合适的回调方法。如果请求成功,Retrofit也会把服务器的响应传给你。
有关更多信息,请查看此 link:https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html and https://futurestud.io/tutorials/java-basics-for-retrofit-callbacks 这将帮助您更多地了解改装 Call-backs
我目前的成功响应是这样的:
{"status":"success","message":"msg here"}
代码 200
我的错误响应是这样的:
{"status":"failure","message":"There was a validation error","errors":{"shippingAddress":{"phoneNumber":"Please enter a valid phone number"}}}
代码 400
我的问题是下面的代码不起作用,因为它总是在 onFailure() 中运行
if (response.isSuccessful()) {
// do something
} else if (response.code() == 400) {
Gson gson = new Gson();
ErrorPhone message = null;
if (response.errorBody() != null) {
message = gson.fromJson(response.errorBody().charStream(), ErrorPhone.class);
}
if (message != null) {
Toast.makeText(context, message.getErrors().getShippingAddress().getPhoneNumber(), Toast.LENGTH_LONG).show();
} else {
String errors = "";
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
errors = jObjError.getJSONObject("errors").getJSONObject("shippingAddress").getString("phoneNumber");
} catch (JSONException | IOException e) {
e.printStackTrace();
}
if (!errors.equals("")) {
Toast.makeText(context, errors, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, response.message(), Toast.LENGTH_LONG).show();
}
}
}
在 onFailure 内部我不能听 errorBody 来处理响应
使用名为 onResponse
的 Retrofit 接口并将您的 代码 放在那里。由于 Retrofit 使用两种不同的 callback
方法来处理网络请求的两种可能结果:失败 或 成功请求。 Retrofit 会根据结果调用合适的回调方法。如果请求成功,Retrofit也会把服务器的响应传给你。
有关更多信息,请查看此 link:https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.html and https://futurestud.io/tutorials/java-basics-for-retrofit-callbacks 这将帮助您更多地了解改装 Call-backs