【问题标题】:Cannot resolve method 'of' in 'ImmutableList [closed]无法解析 \'ImmutableList 中的方法 \'of\' [关闭]
【发布时间】:2022-10-21 01:25:12
【问题描述】:

遵循 Android Billing 5.0 的教程。 ImmutableList 中的“of”标记为红色,Android Studio 中的错误为

无法解析 'ImmutableList' 中的方法 'of'”

我该如何解决?

QueryProductDetailsParams queryProductDetailsParams =
        QueryProductDetailsParams.newBuilder()
                .setProductList(
                        ImmutableList.of(
                                QueryProductDetailsParams.Product.newBuilder()
                                        .setProductId(PREMIUM_MONTHLY_VERSION_ID)
                                        .setProductType(BillingClient.ProductType.SUBS)
                                        .build()))
                .build();

根据要求,以下是具体细节:

期望的行为: 代码编译得很好。

实际行为: 编译错误。

重现步骤: 按照教程从 Android Billing 4.0 迁移到 5.0 https://developer.android.com/google/play/billing/migrate-gpblv5

【问题讨论】:

  • 这是什么ImmutableList 类?如果这是核心 Java 的一部分,那么我不熟悉它。
  • @HovercraftFullOfEels 可能来自番石榴。
  • @Michael:谢谢,那么这就引出了一个问题,Guava 的 ImmutableList 类是否有一个 .of(...) 方法来获取当前传递给它的参数?它是否已正确导入,还是与另一个类似名称的类冲突?
  • 也许有来自不同库的方法冲突。比如从另一个库导入和使用其他库的方法
  • 感谢您一直以来的帮助。我现在将其完全限定为 com.google.common.collect.ImmutableList 但不识别包中的“收集”。我被引导相信它需要 java 9。但 Android Studio 显示我正在使用 JDK 11

标签: java android android-billing


【解决方案1】:

ImmutableList,在“a tutorial for Android Billing 5.0”的上下文中,显然是指 guava 的 ImmutableList——这种类型的全称是 com.google.common.collect.ImmutableList

据我所知,这个类被嵌入到了 android 中(但不是在普通的 java 中)。它一直有一个of 方法。因此:

  • 很可能您的包或源文件中有某种类型,称为ImmutableList。不要那样做。将您的重命名为其他名称。
  • 或者,检查您的导入 - 您导入了其他名称为 ImmutableList 的内容。您应该在顶部有一个import com.google.common.collect.ImmutableList;,或者可能是import com.google.common.collect.*; - 如果缺少,请考虑添加它。

Android 没有“拥有”java 9 或 java 11 - 你只需要 java1 就可以了,重点是:它根本不是 java 核心类- 只有以java.* 开头的东西才是。然而,android 不是(相当)java.

我只是不确定:我认为 guava(包含 ImmutableList 的库)默认在 android 上可用,这意味着您的 IDE 设置已损坏。或者可能不是,在这种情况下您需要添加 'guava ' 依赖。如何?嗯,这取决于 - 我认为 android 构建基于 gradle,这意味着:在 search.maven.org 上查找它并按照 gradle 说明进行操作。

【讨论】:

  • 已解决:需要在 build.gradle 依赖项中添加实现 'com.google.guava:guava:24.1-jre'。感谢 Michael、Hovercraft Full of Eels 和 @rzwitserloot 带领我走上正确的道路!
  • @TomV 不错!对于这个答案的含糊之处深表歉意——我没有准备好检查一些东西的 android 环境,而且 gradle 不是我常用的构建系统。
  • 导入 com.google.firebase.crashlytics.buildtools.reloc.com.google.common.collect.ImmutableList;实施 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1' 将起作用。
  • 'com.google.guava:guava:24.1-jre' 可能会在构建时导致 Duplicate class 问题,因此最好将其添加到您的 gradle 中: implementation 'com.google.guava:guava:27.0.1-android' //用于计费
猜你喜欢
  • 2021-03-03
  • 2018-01-15
  • 2022-08-02
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多