2017-07-19 11 views
1

私はEditTextを持っていて、空にしてボタンをクリックするとアプリケーションがクラッシュします。EditTextがEmpty(Android)に設定されているとアプリケーションがクラッシュする

私はAndroidのモニターで表示するとき、それはラインを指す:ここ

final int addTm = Integer.parseInt(Teaching); 

は私のコードです:

のLinearLayout

 <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:padding="2dp"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:layout_weight="1" 
       android:text="" /> 

      <EditText 
       android:id="@+id/tM" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="24dp" 
       android:layout_marginRight="50dp" 
       android:ems="1" 
       android:inputType="number" 
       android:maxLength="1" 
       android:text="0" /> 
      <Button 
      android:id="@+id/submitBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Submit" /> 

     </LinearLayout> 

そして、私のJavaコード:

Submit.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      String Teaching = Tm.getText().toString(); 
      final int addTm = Integer.parseInt(Teaching); 

      FirebaseDatabase database = FirebaseDatabase.getInstance(); 
      DatabaseReference myRef = database.getReference("sub").child("TM"); 
      myRef.runTransaction(new Transaction.Handler() { 
       @Override 
       public Transaction.Result doTransaction(MutableData mutableData) { 
        Integer currentValue = mutableData.getValue(Integer.class); 
        if (currentValue == null) { 
         mutableData.setValue(0); 
        } else { 
         mutableData.setValue(currentValue + addTm); 
        } 

        return Transaction.success(mutableData); 
       } 

       @Override 
       public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot dataSnapshot) { 
        System.out.println("Transaction completed"); 
       } 

      }); 
     } 
    }); 
+0

デフォルトでは、 'EditText'は空の文字列を返すので、このタグは' fire'の問題ではありません。このタグは 'integer'に対して' '解析できません。いくつかの例外処理を実行し、あなたは良いです! – Dennis

答えて

1

他の回答は良いですが、NumberFormatExceptionのtry/catchでラップすることをおすすめします。私は入力が数字だけを受け入れるように設定されていることを知っていますが、残念ながら常により安全です。

小文字の文字列変数の教育。 Javaでは、大文字の型名のみです。 (クラス、インターフェースなど)StackOverflowがどのように変数を強調表示しているか注意してください。

あなたのメンバーフィールドだけでなく、Tmと提出もこれを行います。彼らはtmと書かれて提出する必要があります。また、Tmは変数のわかりやすい名前でもありません。他のプログラマーがあなたのコードを見て、自分のコードを見て、何が何であるか想像してみてください。このtmの文脈はどういうものなのでしょうか?どこから来ていますか?それは何ですか?それは十代の変異体ですか? Integer.parseIntを使用した場合

かかわらずのtry/catchでラップ:

@Override 
    public void onClick(View view){ 

     final int addTm; 
     try { 
      String teaching = Tm.getText().toString(); 
      addTm = Integer.parseInt(teaching); 
     } catch (NumberFormatException e) { 
      addTm = 0; 
     } 

     // ... 
    } 

あなたがこれを行う必要があるのはなぜ?数字入力に10進数を入力するとどうなりますか?

あなたの受け入れられた回答を使用すると、あなたはまだクラッシュします。 Integer.parseIntは10進数を解析しません。

また、デバイスのロケールを切り替えて、奇数文字(Integer.parseInt)が期待できない数字を入力するとどうなりますか?

完全例外であることを確認してください。

+0

あまりにも多くの知識を私に与えてくれてありがとう。私はAndroidレベルの初心者です。そしてティムは教授方法論です! – PrincE

0

実行時Integer.parseInt()空文字列にthrows an NumberFormatException

最初にTeachingの値を確認し、空の文字列でないことを確認するか、またはtry/catchをNumberFormatExceptionに設定し、その場合はTeachingの値を設定します。