2011-09-19 33 views
3

所以我想製作一個計算器應用程序(只是爲了得到一個android開發的竅門),並且我注意到一些測試發現parseInt從「String tack1」轉換導致應用程序崩潰。有人能告訴我爲什麼嗎?我似乎無法弄清楚,而且我一直在搜索互聯網很長一段時間。 (嘿嘿,我是一個菜鳥,所以請去輕鬆)在下面的代碼中,我修改了幾行,以使它看起來很明顯它應該打印什麼,但它仍然崩潰。下面的代碼:parseInt崩潰android應用程序


equals.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      oC = 1; //operator checker is on 1 (for plus) 
      switch(oC){ //check for operator clicked 
       case 0: break; 
       case 1: 
        tack1 = "1"; //INSERTED THIS TO MAKE OUTPUT OBVIOUS 
        tack1 = tack1.trim(); tack2 = tack2.trim(); //INSERTED BEFORE TO DEAL WITH WHITESPACE 
        numOne = Integer.parseInt(tack1); //CRASHES HERE 
        answer.setText(numOne); 
        modeChecker = 0; oC = 0;break; 

NOTES ON PROGRAM(一些評論重複和其它東西,以及):

的tack1 = 「1」;是使輸出明顯

的tack1.trim()是處理空白

是無論是在粘性是一個數字和一個整數(甚至不是一個負整數)

是numOne是整數和如上定義wayy(未在此列出的代碼)

對不起凹痕都弄亂因爲評論的我添加

這是我的onClick方法的部分中,(情況1之後),以便關閉括號不包括在h中ERE。

有人可以幫我嗎? THANKYOU:D

+1

你可以發佈崩潰的Logcat輸出嗎?這樣,我們可以看到拋出什麼樣的異常 – slayton

回答

4

我願意打賭,它實際上是在電話parseInt之後的下一行崩潰。

你在你的TextView上打電話setText(int)。當你將一個int傳遞給這個方法時,那個int是一個指向字符串資源的指針......你可能期望自動轉換爲一個字符串。由於您將應用程序中生成的int傳遞給它,因此這個int極其不可能指向res/values/strings.xml文件中的字符串資源。你真正想要做的是改變numOne爲一個字符串第一,你可以做內聯:

變化

answer.setText(numOne); 

answer.setText(String.valueOf(numOne)); 

,你是好去。

+0

它工作!非常感謝!除了,因爲我是一個noob,我不知道你的意思是一個int指向一個字符串資源。這是否意味着因爲我的整數是在程序中生成的,整數變量不代表字符串所在的內存地址的值?如果是這樣,爲什麼不呢? –

+0

字符串資源實質上是將您的應用程序國際化的基石(支持多種語言,幾乎爲零的額外代碼)。如果您有興趣,我可以進一步解釋,但您可以在Google上輕鬆查看這些內容。在/ res/values /文件夾下查看您的項目。有一個string.xml文件,您可以在其中按名稱定義字符串。每次構建應用程序時,構建過程都會生成R.java文件,該文件包含一串int常量,供您在應用程序中以R.string.my_custom_string等形式使用 – Rich