2016-08-30 1 views
0

GPS 위치가 필요한 앱을 개발했습니다. 위치를 사용할 수없는 경우 사용자에게 설정을 사용하도록 다시 연결합니다.위치 권한을 부여 할 때 너무 빨리 빠져 나옵니다. 위치를 찾지 못했습니다.

내가 빨리하지 않으면 모든 것이 잘 작동하지만 설정 메뉴가 열리면 활성화되어 즉시 null 위치가되는 앱으로 돌아갑니다.

"앱이 위치를 얻길 기다릴 수 있습니까?" 네트워크/GPS가 위치를 읽기 전에 사용 가능하고 있는지

편집

08-30 14:48:35.094 6878-6878/d.g.movida E/AndroidRuntime: FATAL EXCEPTION: main 
                 Process: d.g.movida, PID: 6878 
                 java.lang.RuntimeException: Unable to resume activity {d.g.movida/d.g.movida.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference 
                  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4156) 
                  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:158) 
                  at android.app.ActivityThread.main(ActivityThread.java:7229) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference 
                  at d.g.movida.MainActivity.updateList(MainActivity.java:121) 
                  at d.g.movida.MainActivity.onResume(MainActivity.java:342) 
                  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1286) 
                  at android.app.Activity.performResume(Activity.java:6987) 
                  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4145) 
                  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)  
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)  
                  at android.os.Handler.dispatchMessage(Handler.java:102)  
                  at android.os.Looper.loop(Looper.java:158)  
                  at android.app.ActivityThread.main(ActivityThread.java:7229)  
                  at java.lang.reflect.Method.invoke(Native Method)  
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

나는 확인한다.

그런 다음 가져 오기 전에 위치가 null인지 확인한 다음 (이 오류가 표시되지 않도록 설정 됨) 확인하십시오.

+0

downvoter가 -1에 대한 이유에 대해 자세히 설명 할 수 있습니까? – DomeWTF

+1

null 예외가 발생하는 코드를 게시 할 수 있습니까? –

답변

0

다음은이 문제를 해결하는 데 사용한 코드입니다. 별도의 함수에서 호출되어야하며 호출이 수행되기 전에 초기화된다는 것을 보장합니다.

예를 들어, 내 앱은 Google지도를 사용하고 onMapReady 콜백에서이 함수를 호출합니다.

사용자를 설정 활동으로 안내하지 않고 위치를 사용 설정하도록 요청하는 것이 좋습니다.

public void requestLocationPermissions() { 

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

    LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); 
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); 

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(locationRequest); 
    builder.setAlwaysShow(true); 

    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 

     @Override 
     public void onResult(LocationSettingsResult locationSettingsResult) { 
      final Status status = locationSettingsResult.getStatus(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        Log.i(TAG, "All location settings are satisfied."); 
        //startLocationUpdates(); 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" + 
          "upgrade location settings "); 

        try { 
         // Show the dialog by calling startResolutionForResult(), and check the result 
         // in onActivityResult(). 
         status.startResolutionForResult(getActivity(), 1000); 

        } catch (IntentSender.SendIntentException e) { 
         Log.i(TAG, "PendingIntent unable to execute request."); 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + 
          "not created."); 
        break; 
      } 
     } 
    }); 
} 
+0

나는 그것을 시도하고 다시 당신에게, 감사합니다. – DomeWTF

관련 문제