使用checkSelfPermission的NullPointerException - 我在正确的位置查找吗?

Mal*_*rrr 0 java android google-maps nullpointerexception

我已经发布了我的Android应用程序但是我看到了很多来自用户的错误.我不能每次在模拟器上重现这个问题,所以我自己很难调试它.

它似乎发生在用户在后台运行一段时间后打开我的应用程序时.应用程序将在首次运行时崩溃.当用户再次打开应用程序时,一切都很好.我觉得这与我的权限或上下文为空有关.我没有太多阅读nullpointerexeptions的经验,所以会喜欢一些帮助!

错误:

java.lang.NullPointerException: 
  at android.support.v4.content.ContextCompat.checkSelfPermission (ContextCompat.java:425)
  at me.XXXXXXX.XXXXXXXX.DistanceFragment.getDeviceLocation (DistanceFragment.java:463)
  at me.XXXXXXX.XXXXXXXX.DistanceFragment.onConnected (DistanceFragment.java:239)
  at com.google.android.gms.common.internal.zzm.zzq (Unknown Source)
  at com.google.android.gms.internal.zzaal.zzo (Unknown Source)
  at com.google.android.gms.internal.zzaaj.zzvE (Unknown Source)
  at com.google.android.gms.internal.zzaaj.onConnected (Unknown Source)
  at com.google.android.gms.internal.zzaan.onConnected (Unknown Source)
  at com.google.android.gms.internal.zzzy.onConnected (Unknown Source)
  at com.google.android.gms.common.internal.zzl$1.onConnected (Unknown Source)
  at com.google.android.gms.common.internal.zzf$zzj.zzwZ (Unknown Source)
  at com.google.android.gms.common.internal.zzf$zza.zzc (Unknown Source)
  at com.google.android.gms.common.internal.zzf$zza.zzu (Unknown Source)
  at com.google.android.gms.common.internal.zzf$zze.zzxa (Unknown Source)
  at com.google.android.gms.common.internal.zzf$zzd.handleMessage (Unknown Source)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6682)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)
Run Code Online (Sandbox Code Playgroud)

我说对了......

DistanceFragment.onConnected (DistanceFragment.java:239) is called first
---> then calls DistanceFragment.getDeviceLocation (DistanceFragment.java:463)
------> checkSelfPermission (ContextCompat.java:425)*
Run Code Online (Sandbox Code Playgroud)

检查权限有2个参数:

context上下文权限字符串:

其中一个是空的?

这些行的代码如下:

///第239行

@Override
public void onConnected(Bundle connectionHint) {

    getDeviceLocation(); /// Line 239
Run Code Online (Sandbox Code Playgroud)

///第463行

   if (ContextCompat.checkSelfPermission(getContext(),
                android.Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            mLocationPermissionGranted = true;
        } else {
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                    PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

如果有人有解决方案如何确保这不是null,那将非常感激.

Com*_*are 5

我是否正确地说......其中一个是空的?

是.

如果有人有解决方案如何确保这不是null,那将非常感激.

修复你的片段.只有在片段附加到活动时才能在Play服务中注册.在其他时间从Play服务取消注册,例如分离片段时.现在,onConnected()当片段未附加到活动时,您的回调将被调用,因此getActivity()返回null.