2011-10-03 7 views
0

좋아요. DDMS를 사용하여 코드 디버깅을 시도 했으므로 qutie에서 아직 그 실행을 중단 할 수 없습니다. 내 프로그램이 시작될 때 충돌하기 때문이라고 생각합니다. 어쨌든, 나는 이것을 친구에게 보여 주었고, 내가 뭘 잘못하고 있는지 알 수 없다. 누군가 내 앱이 시작시에 충돌하는 이유를 지적 할 수 있습니까?새로운 응용 프로그램이 시작시 충돌하고 디버그가 도움이되지 않습니다.

감사 :

http://pastebin.com/ZXxHPzng

+0

안드로이드 질문 프로그래밍을 처리하지 않습니다, 그래서 SO에 여기를 마이그레이션. –

+0

어떤 종류의 오류 메시지가 있습니까? 귀하의 링크에서 하나의 활동 파일 만 볼 수 있습니다. 매니페스트를 제대로 설정 했습니까? – Jlange

답변

4

당신이 전역 영역에서 UI 요소를 작성한다이 문제. 전역 객체로 만들려면 해당 객체를 선언 할 수 있지만 컨텐츠 뷰를 설정해야만 인스턴스를 생성 할 수 있습니다. 예 :

private RadioButton rockRB; 
    private RadioButton paperRB; 
    private RadioButton scissorsRB; 
    private TextView result; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     // Content View Must be set before making UI Elements 
     rockRB = (RadioButton)findViewById(R.id.radioRock); 
     paperRB = (RadioButton)findViewById(R.id.radioPaper); 
     scissorsRB = (RadioButton)findViewById(R.id.radioScissors); 
     result = (TextView)findViewById(R.id.result); 
+0

onCreate가 실행되기 전에 실행되지 않습니까? onCreate 범위에 넣어야합니까? 네,이 아이디어는 현재로서는 가능한 한 글로벌하게 만드는 것이 었습니다. – BloodyIron

+0

클래스 정의가 OnCreate 메서드보다 먼저 발생하기 때문에 OnCreate 메서드에서 해당 정의를 사용할 수 없으므로 의미가 있습니다. 전역 적으로 선언하고 OnCreate에서 인스턴스를 생성하면 클래스 전체에서 사용할 수 있습니다. – Pyrodante

+0

기억 : 모든 UI 요소는 setContentView – Pyrodante

1

실제로는 매우 간단합니다. 클래스를 초기화하는 동안 rockRB, paperRB, scissorRB 및 결과 변수를 초기화합니다. findViewById (...)를 호출 할 때 아직 레이아웃이로드되지 않았으므로 지정된 ID가있는 뷰가 없습니다. 따라서 findViewById 함수는이를 나타 내기 위해 null을 반환합니다. 나중에 저장된 ID (null)를 사용하려고하면 널 포인터 예외가 발생하고 전체 응용 프로그램이 충돌합니다.

문제를 해결하려면 findViewById (...)를 사용하여 변수의 초기화를 setContentView 문 아래의 onCreate 함수로 이동하고 setOnClickListener 문 앞에 입력하십시오. 이처럼

:

공용 클래스 RockPaperScissorsActivity가 활동을 확장은 Button.OnClickListener를 구현 { /** 활동이 처음 생성 될 때 호출됩니다. */

private RadioButton rockRB; 
private RadioButton paperRB; 
private RadioButton scissorsRB; 
private TextView result; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    rockRB = (RadioButton)findViewById(R.id.radioRock); 
    paperRB = (RadioButton)findViewById(R.id.radioPaper); 
    scissorsRB = (RadioButton)findViewById(R.id.radioScissors); 
    result = (RadioButton)findViewById(R.id.result); 

    rockRB.setOnClickListener(this); 
    paperRB.setOnClickListener(this); 
    scissorsRB.setOnClickListener(this); 
} 

등등 ...

관련 문제