Как исправить «java.lang.NoSuchMethodError: com.google.firebase.database.DatabaseReference.setValue» - PullRequest
0 голосов
/ 02 января 2019

Я устанавливаю текущее местоположение в своем приложении. Где мне нужно установить кодировку?

    @Override
public void onLocationChanged(Location location) {
    mLastLocation = location;
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(11));

    //Geo Fire for current location
    String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference refAvailable = FirebaseDatabase.getInstance().getReference("driversAvailable");
    DatabaseReference refWorking = FirebaseDatabase.getInstance().getReference("driversWorking");

    GeoFire geoFireAvailable = new GeoFire(refAvailable);
    GeoFire geoFireWorking = new GeoFire(refWorking);

    switch (customerId){
        case "":

            geoFireWorking.removeLocation(userId);
            geoFireAvailable.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()), new GeoFire.CompletionListener() {
                @Override
                public void onComplete(String key, DatabaseError error) {

                }
            });

            break;
            default:
                geoFireAvailable.removeLocation(userId);
                geoFireWorking.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()), new GeoFire.CompletionListener() {
                    @Override
                    public void onComplete(String key, DatabaseError error) {

                    }
                });

                break;
    }


}

Вот ошибка, которую я получаю:

java.lang.NoSuchMethodError: com.google.firebase.database.DatabaseReference.setValue на com.firebase.geofire.GeoFire.removeLocation (GeoFire.java:215) на com.firebase.geofire.GeoFire.removeLocation (GeoFire.java:192) в com.example.webforest.quickaidlikeuber2nd.DriverMapActivity.onLocationChanged (DriverMapActivity.java:184)

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Geofire немного изменился, теперь, чтобы сделать removeLocation, вы должны добавить прослушиватель, подобный этому:

 //after updating 
                    geoFireWorking.removeLocation("id of the node you want to remove", new GeoFire.CompletionListener() {
                        @Override
                        public void onComplete(String key, DatabaseError error) {

                        }
                    });
0 голосов
/ 02 января 2019

Эта ошибка появляется автоматически при использовании метода setLocation() без использования GeoFire.CompletionListener(). Если вы реализуете CompletionListener, это должно решить проблему.

Поэтому замените

geoFire.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()));

с

geoFire.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()), new GeoFire.CompletionListener(){ });

Редактировать 2:
Возможно, вам придется адаптироваться к другому подходу, если вы все еще сталкиваетесь с трудностями.

Заменить следующий код:

geoFireAvailable.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()), new GeoFire.CompletionListener() {
    @Override
    public void onComplete(String key, DatabaseError error) {

    }
});

Со следующим кодом:

GeoHash geoHash = new GeoHash(new GeoLocation(location.getLatitude(),location.getLongitude()));
Map<String, Object> updates = new HashMap<>();
updates.put("g", geoHash.getGeoHashString());
updates.put("l", Arrays.asList(location.getLatitude(),location.getLongitude()));
geoFireAvailable.setValue(updates,geoHash.getGeoHashString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...