【发布时间】:2018-08-21 13:57:12
【问题描述】:
我正在尝试从 URL 获取 id,但得到空指针异常
java.lang.NullPointerException:尝试从空对象引用上的字段“java.lang.String com.hex.encode.ID_Model$User.id”读取 在 com.hex.encode.Home$3.onResponse(Home.java:99)
这是我用来获取 id 的代码:
private void GetID() {
Call<ID_Model> idcall = fetchdata.getIdService().getID(user_search);
idcall.enqueue(new Callback<ID_Model>() {
@Override
public void onResponse(@NonNull Call<ID_Model> call,@NonNull Response<ID_Model> response) {
assert response.body() != null;
String fetched_id =response.body().getUser().getId;//this is where the exception is poping
GetData(fetched_id);
}
@Override
public void onFailure(@NonNull Call<ID_Model> call, @NonNull Throwable t) {
//something//
}
});
}
下面是fetchdata类:
class fetchdata {
private static UserFetchData userdatafetch = null;
private static UserIDFetch fetchService = null;
static UserIDFetch getIdService() {
if (fetchService == null) {
String id_url = "url_and_it's_working";
Retrofit fetch_id = new Retrofit.Builder()
.baseUrl(id_url)
.addConverterFactory(GsonConverterFactory.create())
.build();
fetchService = fetch_id.create(UserIDFetch.class);
}
return fetchService;
}
public interface UserIDFetch{
@GET("{user_input}"+"/")
Call<ID_Model> getID(@Path("user_input") String s);
}
}
编辑
这是 Id_Model :
public class ID_Model {
@SerializedName("user")
@Expose
public User user;
public User getUser() {
return user;
}
public class User {
@SerializedName("id")
@Expose
public String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
编辑 这是来自 API 服务器的响应: https://justpaste.it/4gk8r
【问题讨论】:
-
也许使用 response.isSucessful()
-
ID_Model如果改造未能将 html 正文解析到您的对象中,则将为 null。请显示原始 url 响应和您的模型类 -
hii @cricket_007 我已经在主要问题中发布了 ID_MODEL 类,请看一下。
-
@WeslleyBarbosa 检查我使用了 OnResponce 回调,因此响应成功,ID_Model 中有内容。我有更新问题。
-
总是收到响应,但是响应码可以是 200(OK)、400(BAD REQUEST)
标签: android nullpointerexception retrofit2