当我使用错误的登录信息(使用邮递员)时,我的API会返回此信息:
{
"error": {
"statusCode": 401,
"name": "Error",
"message": "login failed",
"code": "LOGIN_FAILED",
"stack": "Error: login failed\n at ...path..."
}
}
我正在使用这种方法来获取响应消息:
private void handleResponse(retrofit2.Response<Response> response) {
if (response.isSuccessful()) {
emailField.setText(null);
passwordField.setText(null);
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
} else {
try {
showSnackBarMessage(response.errorBody().string());
} catch (Exception e) {
showSnackBarMessage(e.getMessage());
}
}
}
输出(小吃店显示的内容)与邮递员返回的内容相同。
handleresponse
参数retrofit2.Response<Response> response
由retrofit2 Response
和我自己的<Response>
类组成,如下所示:
public class Response {
@SerializedName("message")
@Expose
private String message;
public String getMessage() {
return message;
}
}
如何只让message
出现在snackbar
中?
我尝试了以下代码,但仅得到No value for message
。
try {
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
答案 0 :(得分:0)
根据您的json,响应错误正文是一个对象,该对象的字段为error
,其中包含字段message
。这意味着您首先需要获取错误对象,然后获取消息:
JSONObject jObjError = new JSONObject(response.errorBody().string()).getJSONObject("error");
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();