我正在尝试在我的应用程序中实现Retrofit . 低于错误:
java.lang.NullPointerException:
Attempt to invoke virtual method 'java.lang.String com.retrofitd.rest.LoginModel$Data.getFirstName()' on a null object reference
at com.retrofitd.MainActivity$1$1.onResponse(MainActivity.java:46)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:742)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:5527)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
我的 API CLIENT 课程如下:
public class ApiClient {
public static final String BASE_URL = "http://999.99.999.99/~test/master/api/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
API INTERFACE 如下:
public interface ApiInterface {// gym/gymdetail
@POST("webservice/login")
Call<LoginModel> getGymDetails(@Query("username") String userId,@Query("password")String strGymId);
}
以下 MainActivity.java ,使用如下:
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<LoginModel> call = apiService.getGymDetails("sssss", "123456");
call.enqueue(new Callback<LoginModel>() {
@Override
public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
Toast.makeText(MainActivity.this, "" + response.body().getData().getFirstName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<LoginModel> call, Throwable t) {
Toast.makeText(MainActivity.this, "Failure", Toast.LENGTH_SHORT).show();
}
});
}
还在清单中设置Internet权限 . 可能是什么问题?谢谢 .
EDIT 让我添加我的模型类 . 我的登录模型类如下 . 请检查一下 . 我的模特课:
public class LoginModel {
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("data")
@Expose
private Data data;
@SerializedName("message")
@Expose
private String message;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public class Data {
@SerializedName("id")
@Expose
private String id;
@SerializedName("first_name")
@Expose
private String first_name;
@SerializedName("last_name")
@Expose
private String last_name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("username")
@Expose
private String username;
@SerializedName("password")
@Expose
private String password;
@SerializedName("photo")
@Expose
private String photo;
@SerializedName("birthdate")
@Expose
private String birthdate;
@SerializedName("gender")
@Expose
private String gender;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return first_name;
}
public void setFirstName(String first_name) {
this.first_name = first_name;
}
public String getLastName() {
return last_name;
}
public void setLastName(String last_name) {
this.last_name = last_name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getBirthdate() {
return birthdate;
}
public void setBirthdate(String birthdate) {
this.birthdate = birthdate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
}
3 回答
首先使用postman检查pesponse,如果它正常工作,那么你可以使用json schema来构建pojo,使用json schema to pojo . 在发送请求时你必须通过那个pojo类,你的问题将会解决
可能有很多原因 .
1)您定义的模型类与来自请求的json不匹配
2)你使用错误的方法,例如发布或获取?
但是我看到你的模型类中有一个问题可以在这里发布,以便可以查看它?
像这样创建一个jsonobject并将其发布到正文中
并改变这样的api接口调用
像这样改变界面