Java 运行应用程序时出现致命异常(改装)?
因此,我有一个应用程序,它使用改型作为库从API中提取信息。我原以为一切正常,但每当我运行应用程序时,就会出现空指针异常,应用程序崩溃,我不确定原因: 构建改装的界面:Java 运行应用程序时出现致命异常(改装)?,java,android,google-maps,retrofit,Java,Android,Google Maps,Retrofit,因此,我有一个应用程序,它使用改型作为库从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")
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;
}
}
}
}
公共接口FriendsAPI{
静态最终字符串URL=”https://www.cs.kent.ac.uk/";
@得到(”https://www.cs.kent.ac.uk/people/staff/iau/LocalUsers.php")
调用getFriends();
阶级工厂{
专用静态FriendsAPI服务;
公共静态FriendsAPI getInstance(){
if(服务==null){
改装改装=新改装.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(URL)
.build();
回程服务;
}否则{
回程服务;
}
}
}
}
将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 class-FriendsInfo{
@SerializedName(“用户”)
@暴露
private List Users=new ArrayList();
/**
*
*@返回
*用户
*/
公共列表getUsers(){
返回用户;
}
/**
*
*@param用户
*用户
*/
公共用户(列表用户){
这个。用户=用户;
}
}
最后我调用它的地方(以及触发致命异常的代码,尽管我不知道为什么):
public void populateFriends(){
FriendsAPI.Factory.getInstance().getFriends().enqueue(新回调()函数){
@凌驾
公共void onResponse(调用、响应){
字符串tempLat=response.body().getLat();
字符串tempLon=response.body().getLon();
tLat=Double.parseDouble(tempLat);
tLon=Double.parseDouble(tempLon);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“失败:(”,t.getMessage());
}
});
}
我想我已经包括了所有相关的代码,但是如果有什么遗漏,我可以在这里发布。我在Github上还有一个更完整的项目版本
提前感谢各位。如果服务为空,您将返回空,请这样更改它
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;
}
}
}
您尚未在
getInstance()
中向service
写入任何内容。因此它始终为null
。您需要将改装.create()
对象分配给服务
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;
}
}
你确定
tempLat
&templan
不是null
?你应该在将其解析为double之前添加一个null
检查。嗯,我现在要添加一个检查,但我不确定为什么它们会返回null如果是这样的话,它们不应该从API返回值吗?它可能会返回响应,但随后你就有了e来检查。另外,您必须确保正确解析接收到的响应。嗯,好的,谢谢,我会看一看,看看是否可以修复。请粘贴包含崩溃的logcat输出。谢谢,我现在将更改它编辑:我在编写时收到关于不兼容类型的警告?您的服务实例有问题,c将类型更改为MyApiEndpointInterface,然后像service=reformation.create(FriendsApi.class)那样对其进行实例;我编辑完我的文章,看一看。谢谢,我错过了这一点!我更新了代码,当我现在运行它时,虽然我得到了一个稍微不同的错误,这是因为您在java.lang.Double.doubleValue()中传递空值在onMapReady callback.Hmmm中,好的,我必须找到它的来源,它不应该是空值。谢谢你的帮助!
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;
}
}