网络单例与android中的改进 - null引用异常

时间:2017-07-25 18:35:13

标签: android

我有以下单身人士

public class APIShared {

    public String API_BASE_URL = "http://url.com/";
    public static APIShared instance;
    public APIManager client;

    private Context context;
    private Retrofit retrofit;

    private APIShared (Context context) {

        this.context = context;

        retrofit = new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        client = retrofit.create(APIManager.class);

    }

    public static APIShared init(Context context){

        if (null == instance){
            instance = new APIShared(context);
        }
        return instance;
    }
}

在我的MainActivityonCreate我打电话

Call<List<Category>> call = APIShared.instance.client.categories();

当我启动应用程序时,我得到了

  

java.lang.NullPointerException:尝试从空对象引用上的字段'com.example.me.fooder.APIManager com.example.me.fooder.APIShared.client'中读取

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你搞砸了单身人士模式。实例应该是私有静态的。 init()通常命名为getInstance(尽管不需要),并且是访问实例的唯一方法。您的电话将如下所示:APIShared.init()。client.categories();