Android In App Billing 개발시 BillingService NullPointerException 에러

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start service com.example.dungeons.BillingService@42612ab0 with null: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2507)
at android.app.ActivityThread.access$1900(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.dungeons.BillingService.handleCommand(BillingService.java:430)
at com.example.dungeons.BillingService.onStart(BillingService.java:420)
at android.app.Service.onStartCommand(Service.java:450)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490)

 구글 인앱 빌링 개발 중 Home으로 나가 멀티 태스킹 중인 App을 Kill하게 되면 위와 같은 스샷 및 로그와 함께 에러가 NullPointerException이 발생합니다. 로그에 나온데로 com.example.dungeons.BillingService.handleCommand 에서 발생을 한 것입니다.

public void destroy() {
     mHandler = null;
     mDungeonsPurchaseObserver = null;
     mBillingService.unbind();
     mBillingService = null;
    }

 위 소스 내용은 Dungeons.java에 있는 내용으로 개발중인 App에서 In App Billing가 불필요시 Dungeons.destroy() 만 잘 호출해줘도 이상 없을 듯 합니다. 또는

 BillingService.java의 handleCommand() 함수에 예외 처리를 해주면 됩니다.

try{
...
...
} catch (NullPointerException e) {
      this.unbind();
}

 이렇게 해주면 예외 발생시 자신을 unbind하기 때문에 문제 없습니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.