Google Maps NullPointerException при получении широты и долготы - PullRequest
0 голосов
/ 23 сентября 2018

я пытаюсь создать действие в Картах Google, которое получает текущее местоположение пользователей и прикрепляет значок к текущему местоположению пользователей.Я пробовал код со статическими значениями широты и долготы, и карта работала как надо.Когда я попытался получить значения LatLong программным способом, система выдавала исключение NullPointerException в строке 127, содержащей код double longitude = location.getLongitude();.

Что я делаю неправильно и как я могу это исправить?Заранее благодарим за помощь.

Код деятельности

@Override
public void onMapReady(GoogleMap googleMap) {
    try {
        if (ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 101);
        }
    } catch (Exception e){
        e.printStackTrace();
    }
    LocationManager lm = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();
    gmap = googleMap;
    gmap.setMinZoomPreference(12);
    gmap.setIndoorEnabled(true);
    UiSettings uiSettings = gmap.getUiSettings();
    uiSettings.setIndoorLevelPickerEnabled(true);
    uiSettings.setMyLocationButtonEnabled(true);
    uiSettings.setMapToolbarEnabled(true);
    uiSettings.setCompassEnabled(true);
    uiSettings.setZoomControlsEnabled(true);
    LatLng ny = new LatLng(latitude, longitude);
    gmap.moveCamera(CameraUpdateFactory.newLatLng(ny));
}

Logcat

    Process: ke.co.mytech.mytech, PID: 8425
java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference
    at ke.co.mytech.mytech.HomeFragment.onMapReady(HomeFragment.java:127)
    at com.google.android.gms.maps.zzac.zza(Unknown Source)
    at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source)
    at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source)
    at android.os.Binder.transact(Binder.java:392)
    at fg.b(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):19)
    at com.google.android.gms.maps.internal.bg.a(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):5)
    at com.google.maps.api.android.lib6.impl.be.run(:com.google.android.gms.dynamite_mapsdynamite@13280046@13.2.80 (040306-211705629):5)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5728)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Получил ответ на то, что я делал неправильно в этом вопросе

0 голосов
/ 23 сентября 2018

Несколько вещей, которые могут помочь.

Во-первых, попробуйте использовать FusedLocationProviderClient , чтобы получить местоположение.

FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);
    fusedLocationProviderClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if(location != null) {
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();

                        Log.i(TAG, "Latitude: " + latitude + " | Longitude: " + longitude);
                    } else {
                        Log.e(TAG, "Unable to retrieve location");
                    }
                }
            });

Во-вторых, у меня возникла эта проблема, когда ятестировал на эмуляторе, и он всегда вызывал одно и то же исключение, о котором вы упоминали.Чтобы исправить это, я должен был зайти в приложение Google Maps на моем эмуляторе и позволить ему точно определить мое местоположение, нажав на круговую кнопку цели.Я не уверен, почему это сработало (думаю, потому, что это спасло мое местоположение, чего раньше он не мог сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...