마스터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
  
<strong>빌드도 잘 되는데 앱이 실행 되자마자 중단됩니다...</strong>
<strong>가상머신에서는 되는데 usb로 디바이스에 연결해서 구동하면 앱이 켜지지도 않고 바로 중단 메세지가 나옵니다...ㅠㅠ</strong>
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 (230,170 포인트) 님이 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일 답변
사용하는 위치에서 초기화 여부를 체크한다는게 무슨 말씀인지 알 수 있을까요...??  답변 정말 감사합니다...!!
...