2017-07-19 82 views
1

我有一個EditText,當我將它設置爲Empty並單擊我的按鈕時,我的應用程序崩潰。EditText當它設置爲空時崩潰應用程序(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

這不是'firebase'問題,所以請刪除這個標籤,並且你得到這個錯誤,因爲默認情況下'EditText'返回一個空字符串,不能'解析'爲'integer'。執行一些異常處理,你很好去! – Dennis

回答

1

其他答案是好的,但我建議包裝與NumberFormatException try/catch。我知道你的輸入只能接受數字,但總是比對不起更安全。

小寫字符串變量教學。在Java中,我們只有大寫的類型名稱。 (類,接口等)注意StackOverflow如何突出顯示變量Teaching blue,有點迷失方向?

爲您的成員字段以及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; 
     } 

     // ... 
    } 

你爲什麼要這麼做?如果我在你的號碼輸入中輸入一個十進制數字怎麼辦?

使用你接受的答案,你仍然會崩潰。 Integer.parseInt不解析十進制數字。

或者如果我切換設備的區域設置並輸入奇數字符的數字,Integer.parseInt將不會指望。

要抓住這個例外來充分證明。

+0

謝謝你給我這麼多的知識。我是Android級別的初學者。而Tm是教學方法! – PrincE

0

執行時Integer.parseInt()上一個空字符串它throws an NumberFormatException

首先,檢查Teaching的值,並驗證它不是空字符串,或者 - 嘗試/ catch爲NumberFormatException,並在此情況下爲Teaching設置所需的值。

相關問題