2014-02-10 121 views
1

我試圖做一個小的應用程序,需要在一個EditText數量的輸入,並從一個數組採取相應的價值,並將其顯示在一個TextView設置TextView的數組值

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText e = (EditText) findViewById(R.id.editText1); 
    final TextView t = (TextView) findViewById(R.id.textView1); 
    Button b = (Button) findViewById(R.id.button1); 

    Resources res = this.getResources(); 

    String arr[] = getResources().getStringArray(R.array.example); 

    final Editable input = e.getText(); 

    final String in2 = input.toString(); 
    int number = Integer.parseInt(in2); 

    if(number < 0){ 
     t.setText("Input is too small"); 
    } else if (number > 666){ 
     t.setText("Input is too large"); 
    } else { 
     final String out = arr[number].toString(); 
     b.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       t.setText(in2); 
      } 
     }); 
    } 
} 

我想它這麼如果輸入爲0,按鈕被點擊TextView的是A.

<string-array name="example"> 
    <item >A</item> 
    <item >B</item> 
    <item >C</item> 
    <item >D</item> 
</string-array> 

不幸的是,每當我開始這件事上的仿真器或它立即崩潰的電話。有誰知道我做錯了什麼?

+1

stacktrace會很有幫助.. – simekadam

回答

1

問題是,當你啓動你的應用程序時,你的editText是空的。

因此in2等於"",因此您無法將此值解析爲整數。

移動到您的onClick方法:

b.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) {     
     int number = Integer.parseInt(e.getText().toString()); 
     if(number < 0){ 
      t.setText("Input is too small"); 
     } else if (number >= arr.length){ 
      t.setText("Input is too large"); 
     } else { 
      t.setText(arr[number]); 
     } 
    }); 
} 
0

只是看着代碼好吧,我不認爲這會實現你要實現的目標是什麼!

final Editable input = e.getText(); 

final String in2 = input.toString(); 
int number = Integer.parseInt(in2); 

這發生在onCreate方法中。所以當應用程序運行時,它立即嘗試提取一些文本,但沒有任何提取,因此Integer.parseInt(in2)會拋出運行時異常。

這是我建議的工作流程,可能會涉及到一些代碼的重寫。

在onCreate方法:

  1. 獲取您通過findViewById需要爲你所做的所有對象。

  2. 設置偵聽到EDITTEXT字段和按鈕 - 爲對EDITTEXT聽者負責跟蹤的任何變化,在用戶在由收聽者給出的方法,包括以下代碼:

    stringFromEditText = editText.getText().toString();

    當然,你應該已經把這些早些時候,使這項工作:

    字符串stringFromEditText;

    EditText editText;

之後,您可以調用updateTextView()方法(您自己定義)。 你甚至不需要一個按鈕!一切都在聽者的方法中進行(例如onTextChanged

updateTextView()方法,不要忘了把一些邏輯與壞輸入或零輸入交易:當你遇到不好的投入,只需設置stringFromEditText的價值到「0」。所以你以後總能成功地解析它 - >不再發生崩潰!

我知道我沒有提供所有的代碼太詳細。但我希望這有助於。