Everything is OK but the toast is not showing, "Getting Your Driver" comes again after clicking the "CALL DRIVER"

Viewed 121

As I wrote in findDriver(). block Driver key showing with debug but not toasting and the Call Driver Button is showing once but after clicking it is moving back to the previous state which is Getting your Driver, I have tried my best from my short experience, if anyone can help I am grateful.

private void requestPickupHere(String uid) {
        DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common.pickup_request_tbl);
        GeoFire mGeoFire = new GeoFire(dbRequest);
        mGeoFire.setLocation(uid, new GeoLocation(mLastLocation.getLongitude(), mLastLocation.getLatitude()), new GeoFire.CompletionListener() {
            @Override
            public void onComplete(String key, DatabaseError error) {

            }
        });
        if (mUserMarker.isVisible())
            mUserMarker.remove();
        //add new marker
        mUserMarker = mMap.addMarker(new MarkerOptions().title("Pickup Here").snippet("")
                .position(new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()))
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
        mUserMarker.showInfoWindow();

        btnRequestPick.setText("Getting your DRIVER..");
        findDriver();
    }


    private void findDriver() {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(Common.driver_tbl);
        GeoFire gfDrivers = new GeoFire(databaseReference);
        GeoQuery geoQuery = gfDrivers.queryAtLocation(new GeoLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude()), radius);
        geoQuery.removeAllListeners();
        geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
            @Override
            public void onKeyEntered(String key, GeoLocation location) {
                //if found driver
                if (!isDriverFound) {
                    isDriverFound = true;
                    driverId = key;
                    btnRequestPick.setText("CALL DRIVER");
                    Toast.makeText(Home.this, "Found: " + key, Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onKeyExited(String key) {

            }

            @Override
            public void onKeyMoved(String key, GeoLocation location) {

            }

            @Override
            public void onGeoQueryReady() {
                //if still not found driver
                if (!isDriverFound) {
                    radius++;
                    findDriver();
                }
            }

            @Override
            public void onGeoQueryError(DatabaseError error) {

            }
        });
    }

Debuger view

with thread set

driverId = key;   
btnRequestPick.setText("CALL DRIVER");                        
Toast.makeText(Home.this, "Found: " + key, Toast.LENGTH_LONG).show();

Debuger value

this = {Home$6@8357} 
key = "JXJyvoVE4Td5RLlCiEDTcAUMslE2"
location = {GeoLocation@8360} "GeoLocation(25.6269317, 88.1373717)"
driverId = ""
isDriverFound = true
btnRequestPick = {AppCompatButton@8368} "androidx.appcompat.widget.AppCompatButton{4470e09 VFED..C.. ........ 20,48-700,144 #7f08004c app:id/btnPickupRequest}"

Debug console output:

I/BufferQueueProducer: [SurfaceTexture-0-12694-0](this:0x7765692000,id:0,api:1,p:12694,c:12694) queueBuffer: slot 0 is dropped, handle=0x777427abc0
D/libc-netbsd: getaddrinfo: get result from proxy gai_error = 0
I/System.out: port:443
V/FA: Inactivity, disconnecting from the service
W/System.err: java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.measurement.internal.zzjf@3780888
W/System.err:     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1494)
        at android.app.ContextImpl.unbindService(ContextImpl.java:1639)
        at android.content.ContextWrapper.unbindService(ContextWrapper.java:705)
W/System.err:     at com.google.android.gms.common.stats.ConnectionTracker.unbindService(Unknown Source:25)
        at com.google.android.gms.measurement.internal.zzin.zzah(com.google.android.gms:play-services-measurement-impl@@17.4.1:246)
        at com.google.android.gms.measurement.internal.zzin.zzam(com.google.android.gms:play-services-measurement-impl@@17.4.1:263)
W/System.err:     at com.google.android.gms.measurement.internal.zzin.zzc(com.google.android.gms:play-services-measurement-impl@@17.4.1:330)
        at com.google.android.gms.measurement.internal.zziq.zza(com.google.android.gms:play-services-measurement-impl@@17.4.1:2)
W/System.err:     at com.google.android.gms.measurement.internal.zzah.run(com.google.android.gms:play-services-measurement-impl@@17.4.1:7)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at com.google.android.gms.measurement.internal.zzfy.run(com.google.android.gms:play-services-measurement-impl@@17.4.1:21)
D/HWUIExtension: MTKProgramCache.generateProgram: 571849130901572
I/BufferQueueProducer: [SurfaceTexture-0-12694-0](this:0x7765692000,id:0,api:1,p:12694,c:12694) queueBuffer: fps=8.83 dur=2265.23 max=1539.49 min=14.80
I/System.out: [OkHttp] sendRequest>>
I/System.out: [OkHttp] sendRequest<<
I/BufferQueueProducer: [SurfaceTexture-0-12694-0](this:0x7765692000,id:0,api:1,p:12694,c:12694) queueBuffer: fps=1.18 dur=11019.12 max=10198.47 min=40.01
2 Answers

I do a very silly mistake in see difference

private void requestPickupHere(String uid) {
        DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common.pickup_request_tbl);
        GeoFire mGeoFire = new GeoFire(dbRequest);
        mGeoFire.setLocation(uid, new GeoLocation(mLastLocation.getLongitude(), // its a latitude place mLastLocation.getLatitude() // its a longitude place), new GeoFire.CompletionListener() {
            @Override
            public void onComplete(String key, DatabaseError error) {

            }
        });

corrected code

private void requestPickupHere(String uid) {
        DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common.pickup_request_tbl);
        GeoFire mGeoFire = new GeoFire(dbRequest);
        mGeoFire.setLocation(uid, new GeoLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude()), new GeoFire.CompletionListener() {
            @Override
            public void onComplete(String key, DatabaseError error) {

            }
        });

also be sure about proper geoFire version <3.0.0> will not work, use following version

implementation 'com.firebase:geofire-java:2.3.1'
Related