2012-04-05

Android EditText 元件的資料轉換問題

Android 的 EditText 元件允許使用者輸入資料, 但是不管輸入的資料是數字還是其他字元, 在程式運作中都會將輸入的資料一律視為字串 (或字元), 若要將輸入的資料進行數學運算時, 必須先做型態轉換, 起初在型態轉換方面讓我吃了不少苦頭 ~ 特別在這裡作個筆記與大家分享, 順便也提醒自己.

下面我用畫面並配合程式來說明 :

下圖中, 我配置了兩個 EditText 與 一個 [開始] 按鈕, "+" 與 "=" 兩個符號都是 TextView, 包括顯示相加後的答案欄也是 TextView 元件. 而兩個 EditText 元件的 numeric 屬性皆設定為 integer, 讓它只能接受數字的輸入, 按下 [開始] 鈕後, 我們希望得到兩數相加後的答案 .


直接來看核心程式的部份: (紅色字體部份)

public class StrAndInt extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        final EditText editText1 = (EditText)findViewById(R.id.editText1);
        final EditText editText2 = (EditText)findViewById(R.id.editText2);
        final Button button1 = (Button)findViewById(R.id.button1);
        final TextView textView2 = (TextView)findViewById(R.id.textView2);
       
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                textView2.setText(
                        editText1.getText().toString() +
                        editText2.getText().toString()
                );
            }
        });
    }
}

上面紅色部份的程式說明 :
我將兩個 EditText 的內容進行相加, 運算的結果再呈現到 textView2 中. 下圖中 23 + 12 竟然不是 35 ? 因為資料被當成字串來處理的緣故, 所以23 + 12 = 2312, 但 ~這不是我們要的結果 !

不對! 這結果不是我們要的 ~
把原先的核心程式碼註解掉或刪除掉, 改成如下 :

                int a = Integer.parseInt(editText1.getText().toString());
                int b = Integer.parseInt(editText2.getText().toString());

                textView2.setText(a+b);

這次設定了兩個 int 變數 a、b 來存放兩個經過數值轉換的 EditText 內容, 接著在 textView2 的 setText() 中直接帶入 a + b .... 看看能否成功 ~

這次出了個大錯誤 ! (如下圖) 帶入 textView2.setText() 的資料必須是 String 型態的資料, 數值型態是無法接受的 ~ 更不用說要在裡面進行兩數相加了 ! 

錯誤警告! 錯誤原因並不會在此呈現出來

再接再厲 ! 再把核心碼改成如下 :

                int a = Integer.parseInt(editText1.getText().toString());
                int b = Integer.parseInt(editText2.getText().toString());
              
                textView2.setText(String.valueOf(a+b));
 
 54 + 13 = 67   終於對了 ! 把兩個輸入的資料轉換成數值型態後, 運算完的結果 (a + b) 還必須再轉換成 String 型態, 才能符合 textView2.setText() 的需求. 轉換來轉換去真是有些累人 ~

終於對了 !
結論 :
數值與字串 (String) 型態互相轉換, 要多活用這兩個內建函式 :

( 輸入 int 傳回 String ) :   String.valueOf( int )
( 輸入 String 傳回 int ) :   Integer.parseInt( String )

2 則留言:

  1. 我想請問一下,如果是以資料庫內的數字該怎麼完成相加?

    回覆刪除
    回覆
    1. (假設您使用的是 Android 支援的 SQLite)
      需先知道資料表中要進行相加的 "欄位" 其型別為何
      若欄位並非 "數值型態" 則必須先進行轉型 再做相加運算 (如文中所述)

      如果 ... 您要問的的是 SQLite 的指令相關操作 ...
      只能向您說聲抱歉 請加油 !

      刪除

搜尋此網誌