2012-01-06 36 views
2

我是新來的Java和Android開發,所以我決定做一個簡單的應用程序,需要在兩個領域,並把它們放在一個簡單的數學公式。不過,我必須先將EditText轉換爲Int,然後才能對它們進行任何數學運算,對吧? 在XML文件中,我已經將EditTexts設置爲android:inputType =「number」。 我嘗試過這樣的:EditText到Int

final EditText height = (EditText) findViewById (R.id.height); 
    String heightString = height.getText().toString(); 
    final int heightInt = Integer.parseInt(heightString); 

final EditText height = (EditText) findViewById (R.id.height); 
    final int heightInt = Integer.parseInt(height.getText().toString()); 

我也試過Integer.valueOf在這兩種情況下,但它總是強制關閉我的應用程序,當我運行它,如果我註釋掉int heightInt它不強制關閉。

這裏是整個代碼:

包com.body.calculator;

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.Vibrator; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class bmi extends Activity { 
    /** Called when the activity is first created. */ 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    final TextView results = (TextView) findViewById(R.id.results); 
    final EditText height = (EditText) findViewById (R.id.height); 
    String heightString = height.getText().toString(); 
    final int heightInt = Integer.parseInt(heightString); 
    final EditText weight = (EditText) findViewById (R.id.weight); 
    final Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    Button submit_bmi = (Button) findViewById(R.id.submit_bmi); 
    submit_bmi.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      if (height.getText().toString().equals("") && weight.getText().toString().equals("")) { 
       results.setText("Both fields are empty"); 
       vib.vibrate(100); 
      } 
      else if (height.getText().toString().equals("")) { 
       results.setText("Height is empty"); 
       vib.vibrate(100); 
      } 
      else if (weight.getText().toString().equals("")) { 
       results.setText("Weight is empty"); 
       vib.vibrate(100); 
      } 
      else { 
      results.setText("");  
      } 
     } 


    }); 

} 
} 

任何幫助,將不勝感激。 謝謝,Arnar。的

final EditText height = (EditText) findViewById (R.id.height); 
    String heightString = height.getText().toString(); 
    final int heightInt = Integer.parseInt(heightString); 

回答

5

你的做法是正確的,但你直接在onCreate方法調用此。這意味着,只要應用程序啓動,即使在用戶能夠做任何事情之前,他們也會被調用。因爲這個值總是空的,因爲用戶甚至沒有做任何改變。

當您在onClick(這是正確的)中稍後使用這些值時,由於它們提前初始化,它們仍爲空。

嘗試把這個部分:

String heightString = height.getText().toString(); 
final int heightInt = Integer.parseInt(heightString); 

直接在onClick方法,但你if/else語句,像這樣前開始:

public void onClick(View v) { 
    String heightString = height.getText().toString(); 
    final int heightInt = Integer.parseInt(heightString); 

      // Your statements 

    } 
+0

謝謝,應該看到:/但是,現在當我按下提交按鈕,它強制關閉。 – granra 2012-01-06 18:54:06

+0

我把代碼放在Try-Catch中,當edittexts爲空(如預期的那樣)時輸出「java.lang.NumberFormatException:無法解析''作爲整數',但是如果我把東西放入EditTexts。 – granra 2012-01-06 19:39:36

+0

對於垃圾評論我很抱歉,但我設法找到什麼是力量現在關閉它。如果我設置results.setText(「no force-close」);結果變爲「沒有強制關閉」,但如果我設置results.setText(heightInt);我接近了一支部隊。可能是什麼問題呢? – granra 2012-01-06 20:45:50

0

很多事情可以發生(確切地知道,您可以查看logcat輸出以查看是否拋出異常)。根據您所提供的信息我的猜測是:

  1. findViewById是返回null,然後你想使用的返回值,導致NPE。

  2. Integer.parseInt引發異常。當它無法將字符串解析爲數字時,它會這樣做。你應該用try/catch檢查。

0

您試圖解析onCreate中的EditText上的內容。我猜這個時候EditText是空的,所以如the javadoc所示,解析拋出一個NumberFormatException異常。我想你應該只在用戶提交時解析onClick方法中EditText的內容。

我不知道EditText是如何工作的,但是如果允許用戶在EditText中輸入除整數之外的其他內容,則應該捕獲NumberFormatException以避免拋出異常。

請注意,您的兩個代碼片段完全相同。第一個將EditText的內容存儲在局部變量中,然後解析它。

0

移動的heightIntweightInt分配到onClickListener`

0

我解決了同樣的問題, 把這些線在try和catch塊 字符串heightString = height.getText()的toString(); final int heightInt = Integer.parseInt(heightString);

運行應用程序, 在模擬器,不應該有空間輸入號碼後