2013-10-11 4 views
1

처음으로 Android를 프로그래밍 중이므로 몇 가지 어려움이 있습니다. 아이디어는 사용자가 머리에서 숫자를 가져 와서 앱이 추측하려고하는 추측 게임 앱을 만드는 것입니다. 사용자는 앱에 대해 더 높고 낮은 힌트를 제공합니다. 어떤 이유로 시작 버튼을 누르면 앱이 다운됩니다. 그렇기 때문에 onClick 메서드에 오류가 있다는 것을 알고 있지만 시작 단추를 누른 직후 종료되므로 println과 같은 디버깅을 사용할 수 없습니다.Android 초보자 onClick 크래시

  1. 내 추론이 실패 않습니다

    그래서 실제로 나는이 개 질문이? (또는 내 실수를 알아내는 방법을 보여주십시오)

  2. 어떻게 이런 것들을 디버깅 할 수 있습니까?

시작, 상한 및 하한은 프로그램의 모든 버튼입니다.

@Override 
    public void onClick(View arg0) { 
     int min = 0; 
     int max = 100; 
     Random random = new Random(100); 
     int answer = 0; 

     if (arg0 == start) { 
      answer = random.nextInt(100); 
      buttonTextView.setText(answer); 
     } 
     else if (arg0 == higher){ 
      min = answer; 
      answer = random.nextInt((max - min) + min); 
      buttonTextView.setText(answer); 
     } 
     else if (arg0 == lower) { 
      max = answer; 
      answer = random.nextInt((max-1) - min); 
      buttonTextView.setText(answer); 
     } 

    } 
+1

Logcat을 사용하여 디버깅 할 수 있습니다. 일반적으로 충돌이 printStackTrace()를 호출하고 정확히 어디에서 발생했는지 확인할 수 있습니다. –

+1

우리에게 logcat 오류 로그를 보여주고 오류가 발생한 행을 정확히 알려줄 수 있습니다 ... (대부분 :) :) – yahya

답변

3
  1. 내 추론이 실패 하는가?

잘못된 setText() 방법을 사용하고 있습니다. In the TextView Docsint을 가져 오는 메시지가 표시되며 strings.xml에있는 String 리소스를 검색하여 resource id으로 전달할 수 있습니다. 따라서 귀하의 setText()resource을 찾고 answer 변수는 id입니다. 당신은

buttonTextView.setText(String.valueof(answer)); 

또는 여러 가지 방법 중 하나 같은 것을 함께 String이를 변환 할 것입니다.

  1. 어떻게 이런 식으로 디버깅 할 수 있습니까?

앱이 고장 나면 logcat에서 예외가 발생합니다. This answer을 사용하면 logcat을 읽을 수 있습니다. 보기>보기 - - 이미없는 경우 이클립스에서 로그 캣 창을 열려면,이

창을 수행 할 수 있습니다> 기타 -> 안드로이드 -> 로그 캣

몇 측은

당신은 변경해야 노트 당신의 내가 바꿀 것 params 매우 의미있는 onClick()처럼

public void onClick(View arg0) 
뭔가

public void onClick(View v) // v for view, could also be view, btn 
         // whatever makes sense to you and others who may read it 

처럼 당신은 또한 당신의 Viewid 대신 View 자체를 클릭 비교해야한다.그래서 당신은 onClick()의 외부 초기화해야 다음 onClick()

if (v.getId() == R.id.start) // Assuming start is the id in your xml of your Button 
           // this will also allow you to use a switch statement 

귀하의 변수 (당신이 varg0을 변경 가정) (min, maxanswer) 같은과 비교 것 또는은으로 재설정됩니다 각 클릭에 대한 기본값은 내가 원하지 않는다고 확신합니다 (323go 덕분에이를 지적했습니다).

+0

회원이 박치기 전까지는 "대답"을 후속 클릭에서 사용할 수 없다는 힌트를주고 싶을 수도 있습니다 활동 범위에 있거나 정적으로 만듭니다. – 323go

+0

@ 323go 당신이 무슨 뜻인지 모르겠습니다. "사용 가능"하지 않다는 것은 무엇을 의미합니까? – codeMagic

+0

그는 지역 변수'answer'를 사용하여 더 높거나 낮은 버튼을 눌러 새로운 답을 계산합니다. 그는 이후에'onClick'을 호출 할 때 이전의'answer' 값을 가지지 않을 것이며 항상 0이됩니다. – 323go