簡體   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