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

아주 간단한건데 자꾸 널포인트가 납니다;;

0 추천

안녕하세요.

정말 미궁에 빠진거 같습니다.

아주 간단한건데요.

 

MainActivity가 있고 ABCActivity가 잇는데요.

ABC는 MainActivity에 있는 것들을 재사용하기 위해서 MainActivity를 상속받습니다.

그리고 재사용하기만 하는데

MainActivity는 화면이 잘 나오는데 여기서 ABCActivity로 이동하면,

화면이 뜨기도전에 뻗어버립니다.

오류는 널포인터익셉션이네요..

 

아래 소스 첨부합니다. 조언부탁드려요..

 

public class MainActivity extends Activity {
protected TextView txt1, txt2;
protected Button btn, btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
setEvent();
}
 
public void init() {
txt1 = (TextView)findViewById(R.id.textview1);
txt2 = (TextView)findViewById(R.id.textview2);
btn = (Button)findViewById(R.id.main_btn1);
btn2 = (Button)findViewById(R.id.main_btn2);
}
 
public void setEvent() {
btn.setOnClickListener(event);
btn2.setOnClickListener(event);
}
 
View.OnClickListener event = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()) {
 
case R.id.main_btn1 :
Toast.makeText(MainActivity.this, "하이", 1000).show();
break;
 
case R.id.main_btn2 :
Intent intent = new Intent(MainActivity.this, ABCActivity.class);
startActivity(intent);
break;
}
}
};
}
 
 
 
 
package com.example.activityextendstest;
 
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
 
public class ABCActivity extends MainActivity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.abc);
init();
setEvent();
}
 
@Override
public void init() {
// TODO Auto-generated method stub
txt1 = (TextView)findViewById(R.id.abc_txt1);
txt2 = (TextView)findViewById(R.id.abc_txt2);
 
btn = (Button)findViewById(R.id.abc_btn);
}
}
 
 
물론 매니패스트에 등록 다 했습니다.;;

 

갸아악 (21,260 포인트) 님이 2013년 7월 29일 질문

2개의 답변

0 추천

init 을 오버라이딩 하는데 btn2 는 null 인 상태에서 setEvent()를 호출하고 계시네요

b22n (22,940 포인트) 님이 2013년 7월 29일 답변
그래도 똑같은 널포인터가 발생합니다;;
어디서 널포인터 익셉션이 나는지 로그를 올려보세요
혹시 지금같은 상속 구조가 잘못된건가요?
지금 추적해보니
자식클래스에서 super.onCreate 때문에 다시 부모 클래스로 올라가서
부모 클래스의 onCreate를 한번 더 실행하는 과정에서
널포인터 익셉션이 발생하였습니다.
onCreate에서 하고 있는 작업들을 하나의 메소드로 빼고 그 메소드를 오버라이드 하세요
0 추천

왜... 별도의 activity에 만드신 MainActivity를 extends하신지 모르겠지만

에러가 발생하는 이유는

MainActicity에 

btn2 = (Button)findViewById(R.id.main_btn2);

에서 에러가 나는것 같네요

이유는 여기에 main_btn2는 R.layout.activity_main 에 있는것이고

별도의 Activity인 ABCActivity에서 

setContentView(R.layout.abc); 을 하시게 되면 

R.layout.activity_main 내용은 지워지고 R.layout.abc만 남게 될거 같네요

따라서 R.layout.activity_main에 있는 R.id.main_btn2의 참조가 잘못되서

ABCActivity의 onCreate에서 에러가 발생해서 죽는 것 같네요

 

블랙프리 (1,050 포인트) 님이 2013년 7월 29일 답변
...