我正在尝试从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
答案 0 :(得分:2)
您需要检查response.isSucessful()
的响应是否成功。而且还取决于服务器端,当 API 成功命中服务器时,它们会发送200
,然后我们需要检查 API 响应是否为{{1} }或success
。
对于您而言,我认为 API 调用成功,failure
并返回了一些响应,但是200
是response.body().getUser()
。因此,您必须检查 API 的响应。
答案 1 :(得分:2)
您的回复看起来像这样
{
...
"graphql": {
"user": {
...
"id": "1067259270",
这意味着您忘记了解析graphql
密钥以及所有其他密钥,因此用户为null。
您绝对需要一个这样的模型。
class ResponseModel {
GraphQLModel graphql;
class GraphQLModel {
UserModel user;
class UserModel {
int id;
}
}
}
The Groovy Templates Cheat Sheet for JMeter并使用apollo-codegen(如果使用Apollo Client)生成模型