geoFire.setLocation дает сбой -Котлин - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над картами вместе с GeoFire. При попытке загрузить мое географическое местоположение в базу данных, используя:

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'

Пожалуйста, помогите мне решить эту проблему ..

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Проблема здесь в том, как 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() с дополнительным параметром слушателя - этот метод будет решен правильно.

0 голосов
/ 04 ноября 2018

Если в вашем приложении есть proguard, возможно, вам следует добавить это правило, чтобы метод не запутывался

-dontwarn com.firebase.**
-keep class com.firebase.** { *; }
-keep interface com.firebase.** { *; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...