Как исправить GeoFire для сохранения местоположения в базе данных Firebase в реальном времени при использовании SDK версии 28 - PullRequest
0 голосов
/ 08 апреля 2019

Я использую Android Studio 3.3.2 с версией SDK 28. И мне нужна помощь, чтобы сохранить местоположение, среднюю широту и местоположение пользователя в реальном времени.

Этот код является новой реализацией Firebase, которую они обновили. По мере того как база данных изменила их ссылки. При использовании аутентификации сохранить идентификатор пользователя в базе данных, но при использовании Geofire для получения данных не сохраняет его в базе данных Firebase

public class DriverMapActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {

    private GoogleMap mMap;
    GoogleApiClient mGoogleApiClient;
    Location mLastLocation;
    LocationRequest mLocationRequest;
    private DatabaseReference mDatabase;
    private Button mLogout;

    @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));
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        mDatabase = FirebaseDatabase.getInstance().getReference("DriversAvailable");
        GeoFire geoFire = new GeoFire(mDatabase);
        geoFire.setLocation(userId, new GeoLocation(location.getLatitude(), location.getLongitude()));
     }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(1000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    }

    @Override
    protected void onStop() {
        super.onStop();

        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        mDatabase = FirebaseDatabase.getInstance().getReference("DriversAvailable");

        GeoFire geoFire = new GeoFire(mDatabase);
        geoFire.removeLocation(userId);
    }    
}

Я ожидаю создать столбец DriversAvailable, когда я получу широту и долготу пользователя, которые будут обновляться при каждом перемещении пользователя.

...