ParkSangGwon / TedPermission

Easy check permission library for Android Marshmallow
1.74k stars 238 forks source link

NullPointerException? #20

Closed yanglichuan closed 7 years ago

yanglichuan commented 8 years ago

1 main

java.lang.NullPointerException Attempt to invoke interface method 'void com.gun0912.tedpermission.PermissionListener.onPermissionGranted()' on a null object reference 解析原始 } 1 java.lang.RuntimeException:Unable to start activity ComponentInfo{com.ks.kaishustory/com.gun0912.tedpermission.TedPermissionActivity}: java.lang.RuntimeException: Could not dispatch event: class com.gun0912.tedpermission.busevent.TedPermissionEvent to handler [EventHandler public void com.gun0912.tedpermission.TedInstance.onPermissionResult(com.gun0912.tedpermission.busevent.TedPermissionEvent)]: Attempt to invoke interface method 'void com.gun0912.tedpermission.PermissionListener.onPermissionGranted()' on a null object reference 2 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423) 3 ...... 4 Caused by: 5 java.lang.NullPointerException:Attempt to invoke interface method 'void com.gun0912.tedpermission.PermissionListener.onPermissionGranted()' on a null object reference 6 com.gun0912.tedpermission.TedInstance.onPermissionResult(TedInstance.java:65) 7 java.lang.reflect.Method.invoke(Native Method) 8 com.squareup.otto.EventHandler.handleEvent(EventHandler.java:89) 9 com.squareup.otto.Bus.dispatch(Bus.java:385) 10 com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:368) 11 com.squareup.otto.Bus.post(Bus.java:337) 12 com.gun0912.tedpermission.busevent.TedBusProvider.post(TedBusProvider.java:49) 13 com.gun0912.tedpermission.TedPermissionActivity.permissionGranted(TedPermissionActivity.java:115) 14 com.gun0912.tedpermission.TedPermissionActivity.checkPermissions(TedPermissionActivity.java:159) 15 com.gun0912.tedpermission.TedPermissionActivity.onCreate(TedPermissionActivity.java:58) 16 android.app.Activity.performCreate(Activity.java:6303) 17 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 18 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376) 19 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483) 20 android.app.ActivityThread.access$900(ActivityThread.java:153) 21 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 22 android.os.Handler.dispatchMessage(Handler.java:102) 23 android.os.Looper.loop(Looper.java:148) 24 android.app.ActivityThread.main(ActivityThread.java:5442) 25 java.lang.reflect.Method.invoke(Native Method) 26 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) 27 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

ParkSangGwon commented 7 years ago

@yanglichuan Where did you call TedPermission?

zenkhas commented 7 years ago

Having same problem. This is where I'm calling it:

@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {

        new TedPermission(getActivity())
                .setPermissionListener(permissionlistener)
                .setDeniedMessage("If you reject permission, you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                .setPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.READ_CALL_LOG, Manifest.permission.READ_SMS)
                .check();
    }
}
Bkrickl commented 7 years ago

same problem here called from fragment onCreate new TedPermission(getActivity()) .setPermissionListener(permissionListener) .setDeniedMessage(getString(R.string.fragment_move_gps_denied_error_message)) .setPermissions(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION) .check();

We get this logcat after trying to bring back activity from background java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=10, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {io.bitfactory.pumpmove.debug/com.gun0912.tedpermission.TedPermissionActivity}: java.lang.RuntimeException: Could not dispatch event: class com.gun0912.tedpermission.busevent.TedPermissionEvent to handler [EventHandler public void com.gun0912.tedpermission.TedInstance.onPermissionResult(com.gun0912.tedpermission.busevent.TedPermissionEvent)]: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference at android.app.ActivityThread.deliverResults(ActivityThread.java:4053) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4096) at android.app.ActivityThread.-wrap20(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1516) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Caused by: java.lang.RuntimeException: Could not dispatch event: class com.gun0912.tedpermission.busevent.TedPermissionEvent to handler [EventHandler public void com.gun0912.tedpermission.TedInstance.onPermissionResult(com.gun0912.tedpermission.busevent.TedPermissionEvent)]: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference at com.squareup.otto.Bus.throwRuntimeException(Bus.java:460) at com.squareup.otto.Bus.dispatch(Bus.java:387) at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:368) at com.squareup.otto.Bus.post(Bus.java:337) at com.gun0912.tedpermission.busevent.TedBusProvider.post(TedBusProvider.java:49) at com.gun0912.tedpermission.TedPermissionActivity.permissionGranted(TedPermissionActivity.java:115) at com.gun0912.tedpermission.TedPermissionActivity.onRequestPermissionsResult(TedPermissionActivity.java:208) at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7069) at android.app.Activity.dispatchActivityResult(Activity.java:6921) at android.app.ActivityThread.deliverResults(ActivityThread.java:4049) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4096)  at android.app.ActivityThread.-wrap20(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1516)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6077)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference at android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:425)

ezcocoa commented 7 years ago

same issue.

ParkSangGwon commented 7 years ago

@yanglichuan @zenkhas @Bkrickl @hjbaek Can you upload your project file?(by zip file) I had test but I can not find error. If you upload error sample project, I will find and fix it

serendipper16 commented 7 years ago

저도 비슷한 경우인 것 같은데 NPE가 발생해서 코멘트 남깁니다.

발생상황: fragment의 엑션바 menu아이템 클릭시 TedPermission 호출 후 권한승인되면 엑티비티 실행하는 로직에서 발생. 디버그 모드일때는 정상작동하나 릴리즈 모드로 실행시 발생

실행코드

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_map: / 권한체크 / new TedPermission(getContext()) .setPermissionListener(new PermissionListener() { @Override public void onPermissionGranted() { startActivity(new Intent(getContext(), MapActivity.class)); }

                        @Override
                        public void onPermissionDenied(ArrayList<String> deniedPermissions) {

                        }
                    })
                    .setDeniedMessage("권한이 승인되지 않아  서비스를 실행할 수 없습니다.\n권한설정은 [설정] > [권한]에서 변경하실 수 있습니다.")
                    .setGotoSettingButtonText("설정")
                    .setPermissions(Manifest.permission.ACCESS_FINE_LOCATION)
                    .check();
            break;
    }

    return super.onOptionsItemSelected(item);
}

에러로그

05-08 23:36:09.871 17611-17611/? E/AndroidRuntime: FATAL EXCEPTION: main Process: myapp, PID: 17611 java.lang.NullPointerException at com.gun0912.tedpermission.b.a.c(Unknown Source) at com.gun0912.tedpermission.b.a.b(Unknown Source) at com.gun0912.tedpermission.d.a(Unknown Source) at com.serendipper16.roadyu.fragment.SearchBuildingFragment.a(Unknown Source) at android.support.v4.b.m.c(Unknown Source) at android.support.v4.b.s.a(Unknown Source) at android.support.v4.b.p.a(Unknown Source) at android.support.v4.b.n.onMenuItemSelected(Unknown Source) at android.support.v7.app.c.onMenuItemSelected(Unknown Source) at android.support.v7.view.i.onMenuItemSelected(Unknown Source) at android.support.v7.view.i.onMenuItemSelected(Unknown Source) at android.support.v7.app.o$2.a(Unknown Source) at android.support.v7.widget.Toolbar$1.a(Unknown Source) at android.support.v7.widget.ActionMenuView$d.a(Unknown Source) at android.support.v7.view.menu.h.a(Unknown Source) at android.support.v7.view.menu.j.b(Unknown Source) at android.support.v7.view.menu.h.a(Unknown Source) at android.support.v7.view.menu.h.a(Unknown Source) at android.support.v7.widget.ActionMenuView.a(Unknown Source) at android.support.v7.view.menu.ActionMenuItemView.onClick(Unknown Source) at android.view.View.performClick(View.java:4469) at android.view.View$PerformClick.run(View.java:18584) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5094) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) at dalvik.system.NativeStart.main(Native Method)

2 default

ParkSangGwon commented 7 years ago

@serendipper16 getContext()가 아닌 getActivity() 나 Activity이름.this로 context를 지정해도 같은오류가 발생하시나요?

serendipper16 commented 7 years ago

좀전에 다시 테스트 해봤는데 getActivity()를 해도 여전히 죽으며 fragment에서 호출중인데 MainActivity.this는 어떻게 호출해야 하는지 모르겠습니다. getContext()로 작업시 debug에서는 문제가 없었으나 빌드 후 release로 배포시에 죽는 현상을 발견하였습니다.

2017-05-10 11:43 GMT+09:00 Ted Park notifications@github.com:

@serendipper16 https://github.com/serendipper16 getContext()가 아닌 getActivity() 나 Activity이름.this로 context를 지정해도 같은오류가 발생하시나요?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ParkSangGwon/TedPermission/issues/20#issuecomment-300358208, or mute the thread https://github.com/notifications/unsubscribe-auth/ALL-YCdsAcwrYxttoeZcutd1D9Z-SHsRks5r4SRkgaJpZM4JnQTV .

ParkSangGwon commented 7 years ago

@serendipper16 혹시 Proguard를 사용중이신가요?

serendipper16 commented 7 years ago

아 네 release모드에 proguard 설정이 되어있었어서 발생했던 것 같아요.

ParkSangGwon commented 7 years ago

@serendipper16 Readme의 proguard 설정을 보시고 그대로 적용해보시면 otto관련 이슈는 없을것 같습니다.