You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:50:42