안드로이드 개발

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 간단 해결 방법

피커 2023. 1. 9. 10:29
728x90
반응형

코딩을 하다보면 흔히 발생하는 에러로 NullPointerException이 있습니다.

현업에서는 주로 앞글자를 따서 NPE가 발생했다고 말하기도 합니다.

NPE 문제를 해결하기 위한 가장 간단한 방법을 공유합니다.

 

1. 원인 

   -. API를 제공할때 Null 을 제공하여 문제 발생시 해결하도록 권장합니다.

      null이 있어서 프로그래머는 에러가 발생하는지 초기화가 필요한지 여부를 알게 됩니다.

     하지만, 적절한 null 처리를 하지 않으면 이와 같이 에러만 발생합니다.

 

2. 해결방법

  -. 아래 코드에서 보면 mopubView 객체를 null 확인을 하지 않고 destory 해서 에러가 발생합니다.

@Override
protected void onDestroy() {
    super.onDestroy();
    moPubView.destroy();
}

    이럴때는 아래와 같이 간단히 null 체크 (if) 를 넣어주면 해결됩니다.

@Override
protected void onDestroy() {
    super.onDestroy();
    if (moPubView != null) {
        moPubView.destroy();
    }
}

 

3. 관련 정보

 

   3.1 에러문구 (text)   

에러문구
 

스택 트레이스
1
유형
java.lang.RuntimeException
Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:6154)
  at android.app.ActivityThread.handleDestroyActivity (ActivityThread.java:6199)
  at android.app.ActivityThread.handleRelaunchActivityInner (ActivityThread.java:6539)
  at android.app.ActivityThread.handleRelaunchActivity (ActivityThread.java:6433)
  at android.app.servertransaction.ActivityRelaunchItem.execute (ActivityRelaunchItem.java:71)
  at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:45)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2498)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:226)
  at android.os.Looper.loop (Looper.java:313)
  at android.app.ActivityThread.main (ActivityThread.java:8855)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void com.mopub.mobileads.MoPubView.destroy()' on a null object reference
  at com.picker.volcano.MainActivity.onDestroy (MainActivity.java:1174)
  at android.app.Activity.performDestroy (Activity.java:8607)
  at android.app.Instrumentation.callActivityOnDestroy (Instrumentation.java:1382)
  at android.app.ActivityThread.performDestroyActivity (ActivityThread.java:6141)

      

3.2 관련 원문

Thrown when an application attempts to use null in a case where an object is required. These include:

Calling the instance method of a null object.
Accessing or modifying the field of a null object.
Taking the length of null as if it were an array.
Accessing or modifying the slots of null as if it were an array.
Throwing null as if it were a Throwable value.
Applications should throw instances of this class to indicate other illegal uses of the null object. NullPointerException objects may be constructed by the virtual machine as if stack trace was not writable.

반응형