2014-03-25 37 views
0

我想從editText得到一個數字並在計算中使用,在我的代碼中沒有任何錯誤,但是我沒有得到我想要的,r的值是alwayas 1,這裏是代碼:如何從editText獲取數字?

public class Counter extends Activity { 

    Button add, sub; 
    TextView result; 
    EditText range; 
    double r; 
    public double c=0; 

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

     add = (Button) this.findViewById(R.id.add); 
     sub = (Button) this.findViewById(R.id.sub); 
     result = (TextView) this.findViewById(R.id.result); 
     range = (EditText) this.findViewById(R.id.range); 

     try { 
      r = new Double(range.getText().toString()); 
     } catch (NumberFormatException e) { 
      r = 1; // your default value 
     } 

     add.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       c=c+r; 
       result.setText(""+c); 

      } 
     }); 

     sub.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       c=c-r; 
       result.setText(""+c); 
      } 
     }); 
    } 

任何幫助?

回答

3
 try { 
      r = new Double(range.getText().toString()); 
     } catch (NumberFormatException e) { 
      r = 1; // your default value 
     } 

的代碼,您發佈的片段是正確的。 Double有一個構造函數,它需要String。問題在於你在findViewById之後執行它,可能EditText不包含任何內容。例如,當你按下add,你可以再次獲得EditText的內容和解析它:

add.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      try { 
       r = new Double(range.getText().toString()); 
      } catch (NumberFormatException e) { 
       r = 1; // your default value 
      } 
      c=c+r; 
      result.setText(""+c); 

     } 
    }); 
0

嘗試此(解析串加倍):

R = Double.parseDouble(range.getText()的toString());

你應該得到的EditText值,當用戶在點擊鏈接時,你只會在的onCreate(獲得價值)將採取從EditText上的數據時,它會創建

2

Double類提供了一個靜態方法解析一個字符串以加倍。

所以嘗試改變:

r = new Double(range.getText().toString()); 

要:

r = Double.parseDouble(range.getText().toString()); 

此外,您可能要分析其他字符串到其它類型的數字,如整數:

int x = Integer.parseInt(yourString); 
0

您需要使用Double.parseDouble(range.getText().toString());

0

你只需要做:

r = Double.parseDouble(range.getText().toString()); // Surround with try/catch for fancy functionality 
0

使用這樣的:

r=Double.parseDouble(range.getText().toString());

0

,你可以讓你的EDITTEXT在XML文件中因此,它僅接受數字

android:inputType="number" 

,並在Java代碼中

r = Double.parseDouble(range.getText().toString()); 
+0

你不能double轉換成一個類型,所以你不能寫'新Double.parseDouble ...' –

+0

抱歉,它只是一個錯誤的我,看到我的編輯 – wael

0

試試這個:爲防萬一有可能從EditText中的字符串不能被解析爲雙倍我已經把它放在一個try-catch塊。

double r; 
try { 
    r = Double.parseDouble(range.getText().toString()); 
catch (NumberFormatException ex) { 
    r = 1; 
} 

希望這有助於:)