【发布时间】:2016-08-05 17:05:37
【问题描述】:
每次我启用 Proguard 并使用 Retrofit 时都会出现这个空异常,为了解决这个问题,我将使用 Retrofit 的类添加到 Proguard 列表中,例如:
-keep class com.abohani.example.utils.ban { *; }
即使我添加了它,我仍然遇到以下错误:
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at com.abohani.example.utils.BanUtil$2.onResponse(BanUtil.java:91)
此错误仅在启用 Proguard 时发生,当它被禁用时完全没有错误,错误/代码示例中所述的行:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.API_PATH)
.addConverterFactory(GsonConverterFactory.create())
.build();
ReApi Api = retrofit.create(ReApi.class);
Call<Model> Connection = Api.GetList(UID,Key);
Connection.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
List<BanItem> LatestItems = response.body().GetMain();
for (int i = 0; i < LatestItems.size(); i++) {
}
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
t.printStackTrace();
}
});
第91行是'for'循环行,响应是正确的,它根本不是null,它只是由启用proguard引起的,我已经将它添加到列表中,不知道为什么它不是工作。
是什么原因造成的?以及如何在不向 Proguard 列表中添加类的情况下解决此错误,因为有些类我无法显示其完整代码,我必须使用 Proguard 对其进行加密。
提前致谢。
【问题讨论】:
-
Model 和 BanItem 都是
-keep指令的目标? -
我所有的模型都在“模型”包中,它们也在 -keep 中。
-
我猜这两个类的代码可能会有所帮助。确保正确保存所有正在解析的内容。
-
您想提供哪些课程?我可以提供他们,这个“大小”为空的东西让我很烦恼,并迫使我公开我的真实代码以供查看。
标签: java android retrofit proguard