2013-07-02 36 views
0

所以我試圖爲二十一點創建卡片計數應用程序,但是當我嘗試設置某人正在玩的套牌的數量時,抓住它從可編輯的editText程序似乎崩潰。具體來說,它說「不幸」我的應用程序「已停止。」當我嘗試從EditText獲取文本並將其轉換爲Integer時,應用程序崩潰

這是我所做的代碼。

public int numberOfDecks; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activityName) 

    final EditText numberField = (EditText) findViewById(R.id.editNumber); 
    Button button = (Button) findViewById(R.id.buttonDecks); 

    button.setOnClickListener(new OnclickListener() { 
     public void onClick(View arg0) { 
      numberOfDecks = Integer.parseInt(numberField.getText().toString()); 
      //Because this didn't work I also tried doing 
      //numberOfDecks = Integer.getInteger(numberField.getText().toString()); 
      //However both yield the same problem 
      } 
     } 

}

起初我以爲它與上點擊的方法和解析INT,或可能與一個問題做一個空白的EditText場然而,這的onClick發生在編輯已editted後用。接下來,我嘗試將它放在代碼塊後點擊,同樣的結果仍然發生,但之前顯然這停止,因爲EditText是空的。

編輯:EditText上盒是基於數量的EditText框,所以唯一的有效輸入是一個數字

+1

可能是編輯文本值不能轉換爲整數,如果你想要用戶類型編號,你可以將edittext的inputtype設置爲編號。所以從Android操作系統顯示用戶的數字鍵盤 –

+0

的logcat請詳查 – Siddharth

+0

要清理這樣的誤解,這是的EditText基於數量的EditText所以唯一有效的輸入是跟蹤你,但在真正困難的人一些 –

回答

2
numberOfDecks = Integer.parseInt(numberField.getText().toString()); 

看來你是從文本字段獲取值是不是一個有效的數字。做到這一點裏面的嘗試/捕獲

try 
{ 
numberOfDecks = Integer.parseInt(numberField.getText().toString()); 
}catch(NumberFormatException e) 
{ 
    e.printStackTrace(); 
} 

這將至少保存應用程序從異常崩潰。如果發生這種情況,您需要編寫替代流程。以及確保您從文本字段獲得有效值。

+0

不! http://stackoverflow.com/questions/17421506/how-to-parse-same-tag-name-in-android-xml-dom-parsing 您的幫助將非常感謝! – Altair

+0

Altair一直跟蹤你的傢伙。 – yams

+0

@AltairRules:如果你是一個upvoting,請不要這麼做。這是違反SO政策的。任何來自不規則圖案的upvotes將被刪除。 – kosa

0

就像之前所說的,它看起來像你試圖得到一個不是有效數字的值。

要解決它,你可以使用try/catch語句和輸出某種錯誤消息在祝酒的形式,當輸入值是不是做類似有效:

try 
{ 
numberOfDecks = Integer.parseInt(numberField.getText().toString()); 
}catch(Throwable t) 
{ 
    Toast.makeText(this, "Error: Please use a number as input", Toast.LENGTH_SHORT).show(); 
} 

另一種方法(即我個人在我的應用程序中使用時,我有這種情況)是將EditText屬性inputType設置爲號碼,或者甚至numberSigned如果您確實接受正數和負數。這樣用戶只能輸入數字而沒有別的。在layout.xml的EditText上會是這樣的:

<EditText 
    android:id="@+id/editNumber" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:hint="Insert a number" 
    android:inputType="number" /> 

然後,我會驗證輸入,看它是否爲空當按下按鈕:

button.setOnClickListener(new OnclickListener() { 
    public void onClick(View arg0) { 
     if (!numberField.getText().toString().equals("")) { 
      numberOfDecks = Integer.parseInt(numberField.getText().toString()); 
      // DO WHAT YOU WANT WITH THE NUMBER VALUE 
     } 
     else { 
      Toast.makeText(this, "Error: Choose the number of decks", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}); 
0

也許你有在那裏額外的字符就像回車或什麼的。

試試這個:

numberOfDecks = Integer.valueOf(numberField.getText().toString().trim()); 

而且我從來沒有使用parseInt。我真的不知道技術差異,但valueOf調用似乎對我更好

相關問題