2016-01-10 4 views
1

Я пытаюсь найти последнее известное местоположение устройства с помощью GoogleApiClient. Поэтому я использовал доступ к точечному уровню, но получаю следующее исключение, потому что приходящее местоположение равно null.android location apis: FusedLocationApi.getLastLocation дает нулевое значение

E/AndroidRuntime: FATAL EXCEPTION: main 
     Process: com.example.kuldeep.location2, PID: 1421 
      java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference 
       at com.example.kuldeep.location2.MainActivity.onConnected(MainActivity.java:51) 

       private GoogleApiClient mGoogleApiClient; 

       @Override 
       protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 

        mGoogleApiClient = new GoogleApiClient.Builder(this) 
         .addConnectionCallbacks(this) 
         .addOnConnectionFailedListener(this) 
         .addApi(LocationServices.API) 
         .build(); 
       } 

       @Override 
       protected void onStart() { 
        mGoogleApiClient.connect(); 
        super.onStart(); 
       } 

       @Override 
       protected void onStop() { 
        mGoogleApiClient.disconnect(); 
        super.onStop(); 
       } 

       @Override 
       public void onConnected(Bundle bundle) { 

        try { 
         Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
          mGoogleApiClient); 
         Toast.makeText(this, mLastLocation.getLatitude() + ", " + mLastLocation.getLongitude(), Toast.LENGTH_SHORT); 
        } catch (SecurityException e){ 
         e.printStackTrace(); 
        } 
       } 

Мой файл манифеста выглядит следующим образом:

ответ

0

Прежде всего, getLastLocation() может быть пустым, так что вы будьте осторожны acessing непосредственно mLastLocation без «нулевого» чека. Во-вторых, я предлагаю вам добавить в ваш манифест:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

, а затем позвоните по адресу LocationRequest.

if(locRequest== null) 
{ 
    locRequest= new LocationRequest(); 
    locRequest.setInterval(interval); 
    locRequest.setFastestInterval(fastestInterval); 
    locRequest.setPriority(priority); 

    LocationServices.FusedLocationApi.requestLocationUpdates(yourGoogleApiClient, locRequest, this); 
} 
0

Использование GoogleApiClient найти CurrentLocation как эти:

private GoogleApiClient googleApiClient; 
private Location mLastLocation; 

       @Override 
       protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 

        isCheckLocationServiceisOn(context); 

        if(googleApiClient == null) { 
        googleApiClient = new GoogleApiClient.Builder(this) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 
     } 

       @Override 
       protected void onStart() { 
        mGoogleApiClient.connect(); 
        super.onStart(); 
       } 

       @Override 
       protected void onStop() { 
        mGoogleApiClient.disconnect(); 
        super.onStop(); 
       } 


       @Override 
       protected void onResume() { 
        super.onResume(); 
        isCheckLocationServiceisOn(context); 
       } 

       @Override 
       public void onConnected(Bundle arg0) { 

      if(googleApiClient.isConnected()) { 
       mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 

      if (mLastLocation != null) { 
       System.out.println("latiTude....."+ String.valueOf(mLastLocation.getLatitude())); 
       System.out.println("longiTude....."+ String.valueOf(mLastLocation.getLongitude())); 
      } 
     } 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult arg0) { 
     System.out.println("onConnectionFailed...."+ arg0.toString()); 
    } 


    @Override 
    public void onConnectionSuspended(int arg0) { 
     System.out.println("onConnectionSuspended...."+ arg0); 
    } 

Добавить разрешение в манифесте:

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Здесь

Реализует ConnectionCallbacks, OnConnectionFailedListener интерфейс для поддерживаемых методов переопределения должен быть com.google.android.gms.common.api.GoogleApiClient package.

ДОЛЖНЫ ПОМНИТЬ:

Wi-Fi и GSM и GPS является должна быть в устройстве, если не генерировать такого рода ошибки в onConnected()

Я даю вам код для проверки & открытое сервисное обслуживание также:

public static void isCheckLocationServiceisOn (final Context context) { 
     LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

     boolean gps_enabled = false; 
     boolean network_enabled = false; 

     try { 
      gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     } 
     catch(Exception ex) {} 

     try { 
      network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     } 
     catch(Exception ex) {} 

     if(!gps_enabled && !network_enabled) { 
      // notify user 
      AlertDialog.Builder dialog = new AlertDialog.Builder(context); 
      dialog.setMessage("Location Services Disabled. \n Please enable location services."); 

      dialog.setPositiveButton("Enable", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
         Intent myIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         context.startActivity(myIntent); 
         //get gps 
        } 
       }); 

      dialog.setNegativeButton("Cancle", new DialogInterface.OnClickListener() { 

        @Override                                          
        public void onClick(DialogInterface paramDialogInterface, int paramInt) { 


        } 
       }); 
      dialog.show();  
     }  
    } 
Смежные вопросы