2012-09-09 47 views
2

我想從一個編輯文本設置爲inputType =「number」的int,然後把它(我會做一些事情後來)我不能這樣做,這是我已經被告知的代碼嘗試但它不工作Android從編輯文本中獲取int值?

Button go; 
EditText num; 
TextView OP, ST; 
String OPS; 
int oer; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initalize(); 
    go.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      int myNum = 0; 

      OPS = num.getText().toString(); 

      try { 
       myNum = Integer.parseInt(OPS); 
      } catch(NumberFormatException nfe) { 
       System.out.println("Could not parse " + nfe); 
      } 
      OP.setText(myNum); 
     } 

我運行它後,它強制關閉。 這是日誌CAT:

09-09 16:53:00.400: W/ResourceType(20145): No package identifier when getting value for resource number 0x00000008 
09-09 16:53:00.400: D/AndroidRuntime(20145): Shutting down VM 
09-09 16:53:00.400: W/dalvikvm(20145): threadid=1: thread exiting with uncaught exception (group=0x40a411f8) 
09-09 16:53:00.561: E/AndroidRuntime(20145): FATAL EXCEPTION: main 
09-09 16:53:00.561: E/AndroidRuntime(20145): android.content.res.Resources$NotFoundException: String resource ID #0x8 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.content.res.Resources.getText(Resources.java:248) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.widget.TextView.setText(TextView.java:3473) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at com.Nutty.studios.randnumgen.free.RandomNumberGenActivity$1.onClick(RandomNumberGenActivity.java:42) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.view.View.performClick(View.java:3511) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.view.View$PerformClick.run(View.java:14105) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.os.Handler.handleCallback(Handler.java:605) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.os.Looper.loop(Looper.java:137) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at android.app.ActivityThread.main(ActivityThread.java:4575) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at java.lang.reflect.Method.invokeNative(Native Method) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at java.lang.reflect.Method.invoke(Method.java:511) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
09-09 16:53:00.561: E/AndroidRuntime(20145): at dalvik.system.NativeStart.main(Native Method) 

它工作正常,如果我嘗試了把字符串,但不是作爲一個整數? 請幫忙謝謝!

+0

它可以幫助你描述它如何失敗。有意想不到的輸出嗎?例外?什麼是堆棧跟蹤? – Chase

+0

使用Log類記錄而不是System.out.println(); –

+0

我如何做到這一點,我也會把日誌貓放在他的問題 –

回答

12

你將永遠不會得到的EditText的intInputType提供爲您提供正確的softKeyboard ...

2.可以轉換從文本EditText in to integer using this ..

int i = Integer.parseInt(editText.getText().toString());

而且setText會希望你向它提供一個String ....所以,你需要做到這一點...

OP.setText(myNum+"");

toString()Object類型的作品,並按照您的聲明myNumint ,這是一個原始類型 ....你需要使用+ ""

+0

謝謝你這麼多也爲了快速回復 –

+0

不客氣........... –

2

"inputType = number"並不意味着在EditTex輸入t將以整數的形式出現。它只是表示在輸入值時將顯示給用戶的軟鍵盤的類型以及EditText中的有效條目,即,與inputType=number EditText將採取只有號碼和沒有別的,但這些號碼將是字符串格式 [String number = "12345"],你需要手動從 字符串獲得整數值。

字符串轉換輸入整數:

int myNum = Integer.valueOf(editText.getText().toString()).intValue();


而且,你的輸出的TextView只能在setText()字符串參數,你試圖傳遞一個整數。 TextView.setText("STRING")是在任何TextView中顯示輸出的格式,如果您試圖在TextView中顯示整數,則需要先將其轉換爲字符串。

整型轉換爲字符串輸出:OP.setText(Integer.toString(myNum);

+0

非常非常感謝你 – rad

+0

在帶'inputType = number'和有限'maxLength'的EditText中(例如4個),我們是否還需要捕獲'Integer.parseInt'的異常,或者輸出保證是一個正確的整數值? – AnAurelian

2

OP。setText(myNum)導致崩潰。

這是由於setText(int value)的性質,它將查找字符串資源而不是設置整數的文字值。

相反,你需要做的:

OP.setText(String.valueOf(myNum))

其他一切正常。

+0

另外,最安全的方法是使用默認值在try catch中執行String.valueOf(myNum)。 – Cookster