我正在和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'
请帮我解决这个问题。。
这里的问题是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;
。我的项目中firebase-database
依赖项的实际方法签名(我使用最新的16.0.4(是setValue(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task;
。注意,返回类型不同,这就是NoSuchMethodError
的原因。
对于具有单个参数的removeLocation()
也存在同样的问题。快速解决方法是将setLocation()/removeLocation()
与一个额外的侦听器参数一起使用——这些方法将被正确解析。
如果你的应用程序中有proguard,也许你应该添加这个规则,这样方法就不会混淆
-dontwarn com.firebase.**
-keep class com.firebase.** { *; }
-keep interface com.firebase.** { *; }