所以我有一个应用程序,它使用改进作为库从API中提取信息。我以为我已经完成了所有工作,但每当我运行应用程序时,我得到一个空指针异常,应用程序崩溃,我不确定为什么:
构建改造的界面:
public interface FriendsAPI {
static final String URL = "https://www.cs.kent.ac.uk/";
@GET("https://www.cs.kent.ac.uk/people/staff/iau/LocalUsers.php")
Call<User> getFriends();
class Factory {
private static FriendsAPI service;
public static FriendsAPI getInstance() {
if (service == null) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(URL)
.build();
return service;
} else {
return service;
}
}
}
}
将JSON数组存储到列表中:
public class FriendsInfo {
@SerializedName("Users")
@Expose
private List<User> Users = new ArrayList<User>();
/**
*
* @return
* The Users
*/
public List<User> getUsers() {
return Users;
}
/**
*
* @param Users
* The Users
*/
public void setUsers(List<User> Users) {
this.Users = Users;
}
}
最后我在调用它(以及触发致命异常的代码,虽然我不知道为什么):
public void populateFriends(){
FriendsAPI.Factory.getInstance().getFriends().enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
String tempLat = response.body().getLat();
String tempLon = response.body().getLon();
tLat = Double.parseDouble(tempLat);
tLon = Double.parseDouble(tempLon);
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.e("Failed :(",t.getMessage());
}
});
}
我想我已经包含了所有相关代码,但是如果有任何遗漏,我可以在这里发布。我还在Github上有一个更完整的项目版本。
先谢谢你们。
答案 0 :(得分:1)
如果service为null,则返回null,将其更改为
class Factory {
private static MyApiEndpointInterface service;
if (service == null) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(URL)
.build();
service=retrofit.create(FriendsApi.class);
return service;
} else {
return service;
}
}
}
答案 1 :(得分:1)
您没有在service
内向getInstance()
写任何内容。因此它总是null
。您需要将retrofit.create()
对象分配给service
。
public static FriendsAPI getInstance() {
if (service == null) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(URL)
.build();
service = retrofit.create(FriendsAPI.class); //Add this line
return service;
} else {
return service;
}
}
}
} else {
return service;
}
}