Java 运行应用程序时出现致命异常(改装)?

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")

因此,我有一个应用程序,它使用改型作为库从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;
            }
        }
    }
}
公共接口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;
            }
        }