2012-05-15 80 views
-1

我是新開發的android開發人員,我在第一次真正的嘗試和應用程序時遇到了困難。我正在嘗試製作一個簡單的計算器。但是,當我運行應用程序並輸入序列中的第二個數字以添加計算器時,模擬器會顯示「不幸的是,計算器已停止工作。」我看着logCat,有一堆紅色的錯誤,所以我不認爲我會發布所有這些錯誤。Android應用程序。簡單的計算器崩潰

我的代碼休耕:

package com.example.helloandroid; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

import android.widget.Button; 
import android.widget.EditText; 
import android.view.View.OnClickListener; 
import android.widget.Toast; 
import android.content.Context; 
import android.view.View; 


public class HelloAndroidActivity extends Activity { 
    EditText helloName; 
    /** Called when the activity is first created. */ 

    int value = 0; 
    int acuum = 0; 
    boolean newValue = false; 

    Button add, sub, mult, div, equ, one, two, three; 
    TextView display; 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     add = (Button) findViewById(R.id.Add); 
     sub = (Button) findViewById(R.id.Sub); 
     mult= (Button) findViewById(R.id.Mult); 
     div = (Button) findViewById(R.id.Div); 
     equ = (Button) findViewById(R.id.Equ); 
     one = (Button) findViewById(R.id.One); 
     two = (Button) findViewById(R.id.Two); 
     three = (Button) findViewById(R.id.Three); 
     display = (TextView) findViewById(R.id.Value); 

     add.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       value = Integer.parseInt(display.getText().toString()); 
       acuum += value; 
       newValue = true; 
      } 
     }); 

     sub.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       value = Integer.parseInt(display.getText().toString()); 
       acuum -= value; 
       newValue = true; 

      } 
     }); 

     one.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       if(newValue == true) 
        display.setText('1'); 
       else 
        display.setText(display.getText().toString() + '1'); 

       newValue = false; 

      } 
     }); 

     two.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       if(newValue == true) 
        display.setText('2'); 
       else 
        display.setText(display.getText().toString() + '2'); 

       newValue = false; 

      } 
     }); 

    } 

} 

只是嘗試,並進一步明確。如果我輸入1 + 2,當我點擊2時,應用程序崩潰。我覺得自己只是在看一個簡單的錯誤。任何幫助是極大的讚賞。

提前致謝!

logcat的值:

2月5日至15日:39:30.047:d/gralloc_goldfish(540):仿真器,而不GPU仿真檢測。 (540):將堆棧跟蹤寫入'/ data/3' anr/traces.txt' 05-15 02:39:46.427:W/ResourceType(540):獲取資源編號的值時沒有包標識符0x00000032 05-15 02:39:46.427:D/AndroidRuntime(540)關閉VM 05-15 02:39:46.427:W/dalvikvm(540):threadid = 1:線程退出時未捕獲的異常(group = 0x409c01f8) 05-15 02:39:46.437:E/AndroidRuntime(540) :致命例外:main 05-15 02:39:46.437:E/AndroidRuntime(540):android.content.res.Resources $ NotFoundException:字符串資源ID#0x32 05-15 02:39:46.437:E/AndroidRuntime (540):at android.content.res.Resources.getText(Resources.java:247) 05-15 02:39:46.437:E/AndroidRuntime(540):at android.widget.TextView.setText(TextView.java:3473) 05-15 02:39:46.437:E/AndroidRuntime(540):at com.example.helloandroid.HelloAndroidActivity $ 4.onClick(HelloAndroidActivity.java:80) 05-15 02:39:46.437:E/AndroidRuntime(540):at android.view.View.performClick(View.java:3511) 05-15 02:39:46.437:E/AndroidRuntime(540):at android.view.View $ PerformClick.run(View.java:14105) 05-15 02:39:46.437:E/AndroidRuntime(540)在android.os.Handler.handleCallback(Handler.java:605) 05-15 02:39:46.437:E/AndroidRuntime(540):at android.os.Handler.dispatchMessage(Handler.java:92) 05- 15 02:39:46.437:E/AndroidRuntime(540):at android.os.Looper.loop(Looper.java:137) 05-15 02:39:46.437:E/AndroidRuntime(540):at android.app .ActivityT hread.main(ActivityThread.java:4424) 05-15 02:39:46.437:E/AndroidRuntime(540):at java.lang.reflect.Method.invokeNative(Native Method) 05-15 02:39:46.437 :E/AndroidRuntime(540):at java.lang.reflect.Method.invoke(Method.java:511) 05-15 02:39:46.437:E/AndroidRuntime(540):at com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 05-15 02:39:46.437:E/AndroidRuntime(540):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-15 02:39:46.437:E/AndroidRuntime(540):at dalvik.system.NativeStart.main(Native Method) 05-15 02:39:47.077:I/dalvikvm(540):threadid = 3:到信號3 05-15 02:39:47.097:I/dalvikvm(540):將堆棧跟蹤寫入'/data/anr/traces.txt'

對不起logCat的格式。

+0

「所以我不認爲我會發布所有這些」 - 您可能想要發佈至少幾個。雖然Raymond Chen將心理調試歸結爲美術,但並不是每個人都裝備精良:-)一些信息通常比沒有一個好。 – paxdiablo

+0

而且:'acuum'似乎對我來說不協調,一個累加器會被稱爲'accum'(儘管與你的問題無關)。但是另外兩種可能性,增加一個字符串和一個字符(比如''2') - 是猶太教(太累了,現在看起來不太好)?而且,我懷疑'newValue'應該被初始化爲'true'而不是'false'(也很疲倦,看看顯示器是否默認爲空字符串)。 – paxdiablo

+0

感謝您的快速回復! 我會拋出一些錯誤: – Allz69

回答

1

你可能想看幾件事。

在一些地方使用字符'2'可能會更有意義使用字符串"2"。例如:

display.setText('1'); 

和:

display.setText(display.getText().toString() + '2'); 

我認爲這是第一個引起您的具體問題。對它的支持在於以下錯誤,從錯誤日誌:

致命異常:主要二月5日至15日:39:46.437:E/AndroidRuntime(540):
android.content.res.Resources $ NotFoundException:
字符串資源ID#0x32

#0x32(十六進制32)是'2'積分值。如果你看一下TextView documentation,你會看到一些原型setText,首先這需要一個整體的資源ID:

公衆最終無效的setText(INT渣油)

這也解釋發生了什麼。 '2'被視爲一個整數並用於查找資源(不存在)。


它也可能是初始化newValue爲真而不是假的一個好主意,因爲這應該是初始狀態。否則,如果您的計算器在顯示屏中以「0」開始,按1按鈕會給您01而不是1

+0

這是關於一切的地方。謝謝您的幫助! – Allz69