繁体   English   中英

使用 Retrofit2 登录后无法获取响应

[英]Unable to fetch response after login using Retrofit2

我正在尝试在我的应用程序中登录用户,因为我正在使用 retrofit2 进行网络但是在输入 email 和密码后,我的应用程序崩溃并显示以下 logcat 错误。

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference

下面是我的代码:

登录响应是

{
"data": [
    {
        "email": "digi@gmail.com",
        "address": "Hsbdbshbd"
    }
],
"status": true,
"code": 200
}

RetrofitClient.java

public class RetrofitClient {

public static Retrofit retrofit = null;

public static Retrofit getInstance(){

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(22, TimeUnit.SECONDS)
            .readTimeout(22, TimeUnit.SECONDS)
            .writeTimeout(22, TimeUnit.SECONDS)
            .build();

    if(retrofit == null)
        retrofit = new Retrofit.Builder()
                .baseUrl("http://www.gurgaonhomeo.in/api_server/")
                .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();

    return retrofit;
   }
}

ApiService.java

@POST("login")
@FormUrlEncoded
Observable<LoginResponse> loginUser(@Field("email") String email,
                                      @Field("password") String password);

登录Response.java

public class LoginResponse {

@Expose
@SerializedName("code")
private String code;

@Expose
@SerializedName("data")
private List<LoginRes> data;

@Expose
@SerializedName("status")
private String status;

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public List<LoginRes> getData() {
    return data;
}

public void setData(List<LoginRes> data) {
    this.data = data;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}
}

登录Res.java

public class LoginRes {

@SerializedName("address")
private String address;

@SerializedName("email")
private String email;

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
} 
}

登录.java

 private void signIn(String mail, String pwd) {

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    apiService.loginUser(mail,pwd).subscribeOn(Schedulers.io())
                                  .observeOn(AndroidSchedulers.mainThread())
                                  .subscribe(new Observer<LoginResponse>() {
                                      @Override
                                      public void onSubscribe(Disposable d) {

                                      }

                                      @Override
                                      public void onNext(LoginResponse loginResponse) {

                                          prg.dismiss(); 
                                          List<LoginRes> res = loginResponse.getData();
                                          Toast.makeText(Login.this, "" +res.get(0).getEmail(), 
                                           Toast.LENGTH_SHORT).show();
                                       }

                                      @Override
                                      public void onError(Throwable e) {

                                          TastyToast.makeText(getApplicationContext(),e.getMessage(),TastyToast.LENGTH_LONG,
                                                  TastyToast.ERROR).show();
                                          prg.dismiss();
                                      }

                                      @Override
                                      public void onComplete() {

                                      }
                                  });
}

为什么我会收到此错误?

List<LoginRes> res = loginResponse.getData(); 行检查Log.d("TAG", "response: " +res)检查 res 值是否为 null? 还要在这里查看@POST("login")我认为在这部分"login"中,应该有一个登录 url 将在基础 url 之后使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM