Android 成功 JSON 响应但 response.isSuccess() 不正确
Android successful JSON response but response.isSuccess() is not true
我终于从 Instagram API 那里收到了访问令牌的回复。
final Call<TokenResponse> accessToken = ServiceManager.createTokenService().getAccessToken(request);
accessToken.enqueue(new Callback<TokenResponse>() {
@Override
public void onResponse(Call<TokenResponse> call, Response<TokenResponse> response) {
mtext.setText("hello");
}
@Override
public void onFailure(Call<TokenResponse> call, Throwable t) {
mtext.setText("failure");
}
});
然而,当我检查 response.isSuccess() 是否失败时?我不明白这一点。
此外,我正在使用 Retrofit 2 并且我已经导入了 Gson,它应该自动映射数据吗?
在retrofit 2中,onFailure
仅在HTTP请求过程中出现网络或意外异常时调用。
response.isSuccess()
当 http 状态为 2xx 或 3xx 时它将 return 为真,否则为 return 假。
因此,当 isSuccess 为真时,您可以使用正确的数据模型来映射 json。当 isSuccess 为 false 时,您可以定义一个常见的错误模型来映射 json。
[编辑]添加一些我在项目中使用 retrofit2 的示例代码片段,希望这对您有所帮助。
@Override public void onResponse(Response<T> response, Retrofit retrofit) {
onNetworkRequestFinished();
if (response.isSuccess()) {
onSuccess(response.body());
} else {
onFailed(response, retrofit);
}
}
@Override public void onSuccess(SignupResponse signupResponse) {
((JFragmentActivity) context).dialogHelper.dismissProgressDialog();
sharedPreferenceHelper.saveLoginName(context, userName);
doAfterSignin(context, signupResponse);
}
public void onFailed(Response response, Retrofit retrofit) {
Converter<ResponseBody, JErrorReponse> errorConverter =
retrofit.responseConverter(JErrorReponse.class, new Annotation[0]);
try {
JErrorReponse error = errorConverter.convert(response.errorBody());
if (error != null) {
JToast.toastLong(error.msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
JErrorResponse.java
public class JErrorReponse implements Serializable {
public int status;
public String msg;
public Object err;
}
SignupResponse.java
public class SignupResponse extends BaseResponse {
public UserLoginData data;
}
UserLoginData.java
public class UserLoginData implements Serializable {
@SerializedName("u_id") public int uId;
@SerializedName("username") public String userName;
public String icon;
}
我终于从 Instagram API 那里收到了访问令牌的回复。
final Call<TokenResponse> accessToken = ServiceManager.createTokenService().getAccessToken(request);
accessToken.enqueue(new Callback<TokenResponse>() {
@Override
public void onResponse(Call<TokenResponse> call, Response<TokenResponse> response) {
mtext.setText("hello");
}
@Override
public void onFailure(Call<TokenResponse> call, Throwable t) {
mtext.setText("failure");
}
});
然而,当我检查 response.isSuccess() 是否失败时?我不明白这一点。
此外,我正在使用 Retrofit 2 并且我已经导入了 Gson,它应该自动映射数据吗?
在retrofit 2中,onFailure
仅在HTTP请求过程中出现网络或意外异常时调用。
response.isSuccess()
当 http 状态为 2xx 或 3xx 时它将 return 为真,否则为 return 假。
因此,当 isSuccess 为真时,您可以使用正确的数据模型来映射 json。当 isSuccess 为 false 时,您可以定义一个常见的错误模型来映射 json。
[编辑]添加一些我在项目中使用 retrofit2 的示例代码片段,希望这对您有所帮助。
@Override public void onResponse(Response<T> response, Retrofit retrofit) {
onNetworkRequestFinished();
if (response.isSuccess()) {
onSuccess(response.body());
} else {
onFailed(response, retrofit);
}
}
@Override public void onSuccess(SignupResponse signupResponse) {
((JFragmentActivity) context).dialogHelper.dismissProgressDialog();
sharedPreferenceHelper.saveLoginName(context, userName);
doAfterSignin(context, signupResponse);
}
public void onFailed(Response response, Retrofit retrofit) {
Converter<ResponseBody, JErrorReponse> errorConverter =
retrofit.responseConverter(JErrorReponse.class, new Annotation[0]);
try {
JErrorReponse error = errorConverter.convert(response.errorBody());
if (error != null) {
JToast.toastLong(error.msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
JErrorResponse.java
public class JErrorReponse implements Serializable {
public int status;
public String msg;
public Object err;
}
SignupResponse.java
public class SignupResponse extends BaseResponse {
public UserLoginData data;
}
UserLoginData.java
public class UserLoginData implements Serializable {
@SerializedName("u_id") public int uId;
@SerializedName("username") public String userName;
public String icon;
}