运行我的应用程序(改造)时出现致命异常?

时间:2016-03-23 18:18:10

标签: 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")
    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上有一个更完整的项目版本。

先谢谢你们。

2 个答案:

答案 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;
            }
        }