【问题标题】:NullException int java.util.List.size() using Retrofit2 when Proguard is enabled启用 Proguard 时使用 Retrofit2 的 NullException int java.util.List.size()
【发布时间】: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


【解决方案1】:
-keep class com.abohani.example.utils.** { *; }. 

尝试将此添加到 proguard 并检查。确保所有模型都位于 utils 包中。

【讨论】:

  • "我所有的模型都在 "model" 包中,它们也在 -keep 中" 另外我不能设置所有 Util 类,因为有些类我不想显示它的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2017-11-13
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多