Android中错误登录信息下Retrofit返回null问题排查
Retrofit登录请求错误场景返回null问题
Android开发场景下,使用正确登录信息时Retrofit登录请求可正常响应,但输入错误登录信息时Retrofit返回null。经核查,成功与失败请求的返回均为JSON格式,相关代码及响应示例如下:
登录Retrofit请求代码
Call<LoginResponse> call = RetrofitClient .getInstance().getApi().userLogin(email_id, password_id); call.enqueue(new Callback<LoginResponse>() { @Override public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { if (!response.body().getError()){ if (progressDialog.isShowing()) { progressDialog.dismiss(); } SharedPrefManager.getInstance(Login.this) .saveLoginData(response.body()); Intent intent = new Intent(Login.this, MainActivity2.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); Toast.makeText(Login.this, "login successful", Toast.LENGTH_LONG).show(); } else { if (progressDialog.isShowing()) { progressDialog.dismiss(); } Toast.makeText(Login.this, response.body().getDesc(), Toast.LENGTH_LONG).show(); } } @Override public void onFailure(Call<LoginResponse> call, Throwable t) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } Toast.makeText(Login.this, t.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } });
LoginResponse模型
public class LoginResponse { @SerializedName("error") @Expose private Boolean error; @SerializedName("code") @Expose private Integer code; @SerializedName("desc") @Expose private String desc; @SerializedName("data") @Expose private LoginData data; public LoginResponse(Boolean error, Integer code, String desc) { this.error = error; this.code = code; this.desc = desc; } public Boolean getError() { return error; } public void setError(Boolean error) { this.error = error; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public LoginData getData() { return data; } public void setData(LoginData data) { this.data = data; } }
LoginData模型
public class LoginData { @SerializedName("userId") @Expose private String userId; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } }
RetrofitClient代码
public class RetrofitClient { private static final String BASE_URL = "https://misemusic.com/app_api/get/"; private static RetrofitClient mInstance; private Retrofit retrofit; private RetrofitClient() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); // set your desired log level logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor( logging ).build(); retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient) .build(); } public static synchronized RetrofitClient getInstance() { if (mInstance == null) { mInstance = new RetrofitClient(); } return mInstance; } public Api getApi() { return retrofit.create(Api.class); } }
API接口定义
@FormUrlEncoded @POST("login") Call<LoginResponse> userLogin( @Field("email") String email, @Field("password") String password );
成功响应JSON
{ "error": false, "code": 200, "desc": "Login Successful", "data": { "userId": "5731e033283f6435e9ed32e2dcf3a59b28e9f23f" } }
失败响应JSON
{ "error": true, "code": 403, "desc": "Incorrect Password Supplied" }
内容的提问来源于stack exchange,提问作者seun oke
相关产品推荐
相关产品推荐

