[컴][안드로이드] library 에서 getSharedPreferences 동작하다가 NullPointerException

 안드로이드 이슈 / 갑자기

library 에서 getSharedPreferences 동작하다가 NullPointerException

아래처럼 크게 문제가 없는 library 등이 갑자기 getSharedPreferences 로 접근하다가 죽는 경우가 있다.

이유는 명확치 않으나, 아래 case 들을 보면 대체로 timing 이슈가 아닌가 생각된다.

나중에 혹시나 더 자세한 사항을 발견하게 되면 정리한다. 지금은 여기까지

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.UserManager.isUserUnlockingOrUnlocked(int)' on a null object reference
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:418)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:404)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)

case 1

아래처럼 getSharedPreferences를 사용하는데,

sharedPref = getApplicationContext().getSharedPreferences("FlutterSharedPreferences",Context.MODE_PRIVATE|Context.MODE_MULTI_PROCESS);
...
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.UserManager.isUserUnlockingOrUnlocked(int)' on a null object reference
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:418)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:404)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
        at com.example.demo1.MorningReset.onStartCommand(MorningReset.java:25)

service 에서 SharedPreference 를 접근하면 문제가 된다고 한다.

그리고 Activity 에서 접근할 때는 문제가 없다고 한다.

case 2

카카오 sdk 에서도 비슷한 문제가 발생했는데, 이 글에서는

  • 기기 상관없이 os version 이 높은 (ANDROID 9, 10, 11 ) 에서 나타난다

고 한다.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean android.os.UserManager.isUserUnlockingOrUnlocked(int)’ on a null object reference
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:466)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:441)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:179)
at com.kakao.sdk.common.model.ApplicationContextInfo.(ApplicationContextInfo.kt:43)
at com.kakao.sdk.common.KakaoSdk.init(KakaoSdk.kt:87)
at com.kakao.sdk.common.KakaoSdk.init(KakaoSdk.kt:59)
at com.kakao.sdk.common.KakaoSdk.init$default(KakaoSdk.kt:57)
at com.kakao.sdk.common.KakaoSdk.init(Unknown Source:9)
at com.gradehealthchain.log.LogApp.onCreate(pk:165)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6222)
at android.app.ActivityThread.access$1200(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1785)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7050)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

case 3

firebase init 에서도 비슷한 이슈가 있었는데 꽤나 최근 답변이다.(2021-05-07)

댓글에 Activity 로 firebase init 을 옮겼다고 한다. 그리고 firebaseApp 전에 isolate 을 초기화 시켰다.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.UserManager.isUserUnlockingOrUnlocked(int)' on a null object reference
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:457)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:443)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:178)
        at com.google.firebase.FirebaseApp.<init>(com.google.firebase:firebase-common@@16.0.2:528)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@16.0.2:355)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@16.0.2:324)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@16.0.2:310)
        at com.test.process.App.onCreate(App.java:32)

case 4

05-05 21:58:27.253 21830 21882 E FA      : java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.UserManager.isUserUnlockingOrUnlocked(int)' on a null object reference
05-05 21:58:27.253 21830 21882 E FA      : at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:485)
05-05 21:58:27.253 21830 21882 E FA      : at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:462)
05-05 21:58:27.253 21830 21882 E FA      : at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:184)

댓글 없음:

댓글 쓰기