마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱이 실행하자마자 중단 됩니다...

0 추천
2022-10-07 10:04:48.675 19484-19484/? I/enatureholding: Late-enabling -Xcheck:jni
2022-10-07 10:04:49.042 19484-19484/com.sol.thenatureholdings I/Perf: Connecting to perf service.
2022-10-07 10:04:49.127 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
2022-10-07 10:04:49.127 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
2022-10-07 10:04:49.127 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
2022-10-07 10:04:49.127 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
2022-10-07 10:04:49.127 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
2022-10-07 10:04:49.162 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden method Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; (light greylist, linking)
2022-10-07 10:04:49.170 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2022-10-07 10:04:49.171 19484-19484/com.sol.thenatureholdings W/enatureholding: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2022-10-07 10:04:49.390 19484-19484/com.sol.thenatureholdings D/AndroidRuntime: Shutting down VM
2022-10-07 10:04:49.392 19484-19484/com.sol.thenatureholdings E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.sol.thenatureholdings, PID: 19484
    java.lang.RuntimeException: Unable to resume activity {com.sol.thenatureholdings/com.sol.thenatureholdings.ui.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)' on a null object reference
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3823)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3855)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1817)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6747)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:498)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)' on a null object reference
        at com.sol.thenatureholdings.ui.MainActivity.onResume(MainActivity.java:376)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1413)
        at android.app.Activity.performResume(Activity.java:7300)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3815)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3855) 
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1817) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6747) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:498) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
 
빌드도 잘 되는데 앱이 실행 되자마자 중단됩니다...
가상머신에서는 되는데 usb로 디바이스에 연결해서 구동하면 앱이 켜지지도 않고 바로 중단 메세지가 나옵니다...ㅠㅠ
hmkim (240 포인트) 님이 2022년 10월 7일 질문
hmkim님이 2022년 10월 7일 수정
빌드도 잘 됩니다.... 가상머신에서도 되는데  usb로 디바이스에 연결해서 구동하면 바로 앱이 켜지지도 않고 중단됩니다...
onResume에서 BroadCastReceiver를 등록하시는 걸로 보이는데요, 이게 어떤 걸 등록하는지요. MainActivity 코드와 AndroidMenifest.xml을 올려보시면 에러 원인을 찾는데 도움이 될 것 같은데요.
@Override
    protected void onResume() {
        super.onResume();

        if(!isPMModel())
        {
            return;
        }

      //  mWaitDialog = ProgressDialog.show(mContext, "", "Waiting...", true);
        mHandler.postDelayed(mStartOnResume, 1000);
        IntentFilter filter = new IntentFilter();
        filter.addAction(ScanConst.INTENT_USERMSG);
        filter.addAction(ScanConst.INTENT_EVENT);
        mContext.registerReceiver(mScanResultReceiver, filter);
    }

    @Override
    protected void onPause() {
        if(!isPMModel())
        {
            super.onPause();
            return;
        }
        if (mScanner != null) {
            mScanner.aDecodeSetResultType(mBackupResultType);
            mScanner.aUnregisterDecodeStateCallback(mStateCallback);
        }
        mContext.unregisterReceiver(mScanResultReceiver);
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        if (mScanner != null) {
            mScanner.aDecodeSetResultType(mBackupResultType);
        }
        mScanner = null;
        super.onDestroy();
    }

    private boolean isPMModel()
    {
        if(Build.MODEL.startsWith(("PM")))
            return true;
        else
            return false;
    }


Manifeat코드와 mainactivity 의 일부 코드입니다...!!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sol.thenatureholdings">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>



    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_logo"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_logo_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

<!--        <uses-library android:name="device.sdk" android:required="true"/>-->

        <activity
            android:name=".ui.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2개의 답변

0 추천
 
채택된 답변

mContext가 어디서 초기화 되는지 확인해 보시겠어요? 액티비티에서 Context는 결국 자기자신일 것 같은데, 이런 경우는 변수를 별도로 두어서 초기화 하시마시고  this로 참조하거나 멤버 메소드를 사용하는게 좀 더 안전해 보입니다.

this.regiserReceiver(...);
// 또는
getContext().registerReceiver(...);

private Context getContext() {
     return this;
}

 

spark (226,420 포인트) 님이 2022년 10월 7일 답변
hmkim님이 2022년 10월 7일 채택됨
감사합니다. 덕분에 해결했습니다.  정말 감사합니다!!
+1 추천

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 

'android.content.Intent android.content.Context.registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)' on a null object reference

at com.sol.thenatureholdings.ui.MainActivity.onResume(MainActivity.java:376)

 

로그를 보시면 MainActivity 에서 함수 호출중에 Null 예외가 발생했다고 하네요, 
registerReceiver 를 호출하는 시점에 object 들 중에 초기화되지 않은 항목이 있는것 같습니다. 

장비별로 라이프사이클 함수별로 스레드 동작 타이밍이 어긋날 수 있으니 사용하는 위치에서 초기화 여부를 체크해보세요.

onCreate() 에서 여러 작업과 함께 object 초기화를 시도,
onResume() 에서 해당 object 를 가져다가 사용 하는 경우 주로 발생할 것 같습니다. 

익명 님이 2022년 10월 7일 답변
사용하는 위치에서 초기화 여부를 체크한다는게 무슨 말씀인지 알 수 있을까요...??  답변 정말 감사합니다...!!
...