2013-10-11 116 views
1

我是第一次編程Android,我遇到了一些困難。這個想法是做一個猜測遊戲的應用程序,用戶在他/她的腦海中接受一個數字,應用程序試圖猜測它。用戶會嚮應用程序提供更高和更低的提示。出於某種原因,按下開始按鈕後,應用程序崩潰。正因爲如此,我知道onClick方法有錯誤,但由於在按下開始按鈕後它立即關閉,我不能使用類似於println的東西來進行調試。Android初學者onClick崩潰

所以其實我有2個問題:

  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 Docs你會看到有一個需要int,這是爲了檢索你在strings.xml中擁有的String資源,所以你會通過它resource id。因此,您的setText()正在尋找一個resourceid無論您的answer變量是什麼。您需要將其轉換爲String,如

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

或其中一種方式。

  1. 我該如何調試?

當你的應用程序崩潰時,你的logcat將會出現異常。 This answer可以幫助你閱讀你的logcat。在Eclipse中打開你的logcat窗口,如果沒有準備好,你可以做到這一點

窗口 - >顯示視圖 - >其他 - > Android的 - > logcat的

一對夫婦旁註

你應該改變你的paramsonClick()到一些有意義的事情,所以我會改變

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本身。所以,你會喜歡的東西以下(假設你改變arg0v)在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 

你的變量(minmaxanswer)比較應該的onClick()外面被初始化,否則將被重置爲每次點擊的默認值,我敢肯定,你不想要(感謝323go指出了這一點)。

+0

可能希望給他一個提示,指出在接下來的點擊中「answer」不可用,除非他將成員在Activity範圍內或使其成爲靜態。 – 323go

+0

@ 323go我不確定你的意思。你是什​​麼意思,它不會「可用」? – codeMagic

+0

他使用局部變量'answer'根據更高/更低的按鈕計算新的答案。他不會在'onClick'的後續調用中獲得'answer'的前一個值,並且它始終爲0. – 323go