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

안드로이드 스튜디오 실행 중단

0 추천

앱을 실행시키면 실행하자마자 꺼지면서 중단됐다는 창이 뜹니다.

해당 줄을 봐도 왜 오류인지 모르겠습니다.

해당 줄 : 

Button main_Start = findViewById(R.id.main_Start);

(독학이라 어렵네요..)

도와주시면 감사하겠습니다 도와주세요 ㅜㅜㅠ

전체 코드는 댓글 확인해주세요! (8천자가 넘네요)

 

<logcat>
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:183)
        at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
        at android.content.Context.obtainStyledAttributes(Context.java:763)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:842)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:809)
        at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:633)
        at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:259)
        at com.example.mywork.MainActivity.<init>(MainActivity.java:33)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3671)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        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:2307) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:246) 
        at android.app.ActivityThread.main(ActivityThread.java:8512) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 

(330 포인트) 님이 2021년 6월 21일 질문

1개의 답변

+1 추천
 
채택된 답변

액티비티에서 XML안에 있는 View element들에 접근할 때는 setContentView()를 통해 레이아웃이 놓여진 다음에야 접근이 가능합니다. 그런데 님의 코드는 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button main_Start = findViewById(R.id.main_Start);
    Button main_End = findViewById(R.id.main_End);
    Button main_Edit = findViewById(R.id.main_Edit);
    ListView main_ScrollList = findViewById(R.id.main_ScrollList); //일주일 근무 내역
    TextView main_State = findViewById(R.id.main_State);\
    ...
}

위처럼, Activity 클래스가 생성되자 마자 View element들에 접근하고 있네요. 이 코드는 동작을 하지 않습니다. 바로 사용법은

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button main_Start;
    Button main_End;
    Button main_Edit;
    ListView  weeklyTimeSheetListView;
    TextView main_State;
    Button tap1;
    Button tap2;
    Button tap3;
    Button tap4;

    ...

   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        bindViews(); // setContentView() 다음에 뷰 요소들에 접근

        ...
    }

    private void bindViews() {
        main_Start = findViewById(R.id.main_Start);
        main_End = findViewById(R.id.main_End);
        main_Edit = findViewById(R.id.main_Edit);
        weeklyTimeSheetListView = findViewById(R.id.main_ScrollList);
        main_State = findViewById(R.id.main_State);
        tap1 = findViewById(R.id.tap1);
        tap2 = findViewById(R.id.tap2);
        tap3 = findViewById(R.id.tap3);
        tap4 = findViewById(R.id.tap4);
    }
}

 

spark (226,420 포인트) 님이 2021년 6월 21일 답변
님이 2021년 6월 22일 채택됨
헐 대박 진짜 감사합니다 ㅠㅠㅠㅠㅠㅠㅠㅠ
...