0

だから私はブラックジャック用のカードカウンティングアプリケーションを作成しようとしていますが、誰かがプレイしているデッキの数を設定して編集可能な editText から取得しようとすると、プログラムがクラッシュするようです. 具体的には、「残念ながら「マイアプリ」は停止されました」と表示されます。

ここに私がやったことのコードがあります。

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
          }
      }

}

最初は、on click メソッドと int の解析、または空の EditText フィールドの問題に関係していると思っていましたが、この onClick は、編集可能なものが編集された後に発生します。次に、クリックしてコードブロックの後に配置しようとしましたが、同じ結果が引き続き発生しますが、EditTextが空であるため、明らかにこれは停止します。

編集: EditText ボックスは数値ベースの EditText ボックスであるため、有効な入力は数値のみです。

4

3 に答える 3

0

前に述べたように、有効な数値ではない値を取得しようとしているようです。

これを修正するには、try/catch ステートメントを使用し、入力値が有効でない場合に、次のようなエラー メッセージを Toast の形式で出力します。

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

もう 1 つの方法 (私がこのような状況にあるときにアプリで個人的に使用する方法) は、EditText プロパティinputTypenumberに設定するか、正数と負数を受け入れる場合は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();
        }
     }
});
于 2013-07-02T17:28:52.700 に答える