【问题标题】:geoFire.setLocation is crashing -KotlingeoFire.setLocation 正在崩溃-Kotlin
【发布时间】:2019-04-07 16:11:39
【问题描述】:

我正在与 GeoFire 一起制作地图。在尝试使用以下方式将我的地理位置上传到 Firebase 时:

initGeoFire.setLocation(currentUser, GeoLocation(mMap.cameraPosition.target.latitude, mMap.cameraPosition.target.longitude))

应用程序崩溃并给出错误:

GeoFire.setLocation - No virtual method setValue(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/firebase/tasks/Task; in class Lcom/google/firebase/database/DatabaseReference; or its super classes (declaration of 'com.google.firebase.database.DatabaseReference'

请帮我解决这个问题..

【问题讨论】:

  • 你的应用有proguard吗?

标签: android firebase google-maps kotlin


【解决方案1】:

这里的问题是 GeoFire 声明 firebase-database 依赖的方式。 2.1.2 之后的版本使用以下版本声明(例如最新的 2.3.1):<version>12.0.1</version>。对于firebase-database 的给定版本,setValue 方法被解析为setValue(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/firebase/tasks/Task;。我的项目(我使用最新的 16.0.4)中 firebase-database 依赖项的实际方法签名是 setValue(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task;。注意,返回类型不同,这就是NoSuchMethodError的原因。

removeLocation() 也存在单个参数的相同问题。快速解决方法是使用 setLocation()/removeLocation() 和额外的侦听器参数 - 这些方法将被正确解析。

【讨论】:

  • 不错的答案。为我工作。谢谢。
【解决方案2】:

如果您的应用中确实有 proguard,也许您应该添加此规则,这样该方法就不会被混淆

-dontwarn com.firebase.**
-keep class com.firebase.** { *; }
-keep interface com.firebase.** { *; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多