[英]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.