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

화면전환시 널포인터 익셉션

0 추천

책에서 한 메모장 예제와 검색해서 잘 돌아가는 알람 예제 두개를 합치려고 했습니다.

단독적으로 둘다 잘돌아가는 거구요 메모장 예제 내에 버튼생성시켜놔서 누르면

액티비티를 전환시켜서 알람을 설정하도록 띄우려고 했습니다만..

앱이 팅구더라구요.. 계속 삽질만 하다가 올려봅니다 ㅠㅠ

널포인터 익셉션이 뜨길래 검색도 해보고, 어디 물어보기도했는데 findbyID 안해줘서 그렇다 라는 답변들을 보았습니다만..

일단 에러메시지입니다.

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test.databaseexam1/com.example.test.databaseexam1.AlermActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.test.databaseexam1.AlermActivity.onCreate(AlermActivity.java:48)
        at android.app.Activity.performCreate(Activity.java:7183)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)

단순히 인텐트로 이렇게 화면전환만 해줍니다

public void alerm(View view) {
    Intent intent = new Intent(getApplicationContext(), AlermActivity.class);
    startActivity(intent);
}

 

해당 온클릭리스너 부분입니다.

Button alarm_on = findViewById(R.id.btn_start);
alarm_on.setOnClickListener(new View.OnClickListener() {
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onClick(View v) {
        Log.d("tag","테스트");
        // calendar에 시간 셋팅
        calendar.set(Calendar.HOUR_OF_DAY, alarm_timepicker.getHour());
        calendar.set(Calendar.MINUTE, alarm_timepicker.getMinute());

        // 시간 가져옴
        int hour = alarm_timepicker.getHour();
        int minute = alarm_timepicker.getMinute();
        Toast.makeText(context,"Alarm 예정 " + hour + "시 " + minute + "분",Toast.LENGTH_SHORT).show();

        // reveiver에 string 값 넘겨주기
        my_intent.putExtra("state","alarm on");

        pendingIntent = PendingIntent.getBroadcast(context, 0, my_intent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        // 알람셋팅
        alarm_manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                pendingIntent);
    }
});

이렇게 find해줬는데도 널포인터입니다.. 구상이 어째되는지 모르시겠다면 전체 소스도 공개가능합니다

액티비티랑 코드가 많아서.. 해당 에러부분인듯 예상되는 곳을 긁어왔습니다

제발 도움좀 주세요 ㅠㅠ 자면서도 생각나서 고통입니다

 

 

수원통학러 (3,570 포인트) 님이 2019년 2월 9일 질문
XML에서 부여한 뷰의 아이디값이 틀린것도 아니라면 전체소스를 봐야할것같은데요.

1개의 답변

0 추천
 
채택된 답변
getApplicationContext()를 클래스명.this로 바꿔보세요.
rhaps20 (6,010 포인트) 님이 2019년 2월 10일 답변
수원통학러님이 2019년 2월 10일 채택됨
아 답변감사합니다. 해결은 했습니다. 소스를 가져올때 안고치고 가져오다보니
onCreate메소드에 main액티비티로 언급되있어서.. 답변 감사합니다.
...