Android应用。简单的计算器崩溃

时间:2012-05-15 01:25:04

标签: java android

我是Android开发的新手,我遇到了第一次真正的尝试和应用程序的障碍。我正在尝试制作一个简单的计算器。然而,当我运行应用程序并输入序列中的第二个数字以添加计算器时,模拟器会说“不幸的是计算器已停止工作”。我查看了logCat,并且有一些红色错误,所以我不认为我会发布所有这些错误。

我的代码就是休闲:

    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值:

05-15 02:39:30.047:D / gralloc_goldfish(540):未检测到GPU仿真的仿真器。 05-15 02:39:30.097:I / dalvikvm(540):threadid = 3:对信号3作出反应 05-15 02:39:30.128:I / dalvikvm(540):将堆栈跟踪写入'/data/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):致命异常:主要 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):在android.content.res.Resources.getText(Resources.java:247) 05-15 02:39:46.437:E / AndroidRuntime(540):在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):在android.view.View.performClick(View.java:3511) 05-15 02:39:46.437:E / AndroidRuntime(540):在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):在android.os.Handler.dispatchMessage(Handler.java:92) 05-15 02:39:46.437:E / AndroidRuntime(540):在android.os.Looper.loop(Looper.java:137) 05-15 02:39:46.437:E / AndroidRuntime(540):在android.app.ActivityThread.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的格式化。

1 个答案:

答案 0 :(得分:1)

您可能想要了解的一些事情。

您可以在一些使用字符串'2'更有意义的地方使用字符"2"。例如:

display.setText('1');

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

我认为这是导致您遇到特定问题的第一个问题。对此的支持在于错误日志中的以下错误:

  

致命异议:主05-15 02:39:46.437:E / AndroidRuntime(540):
  android.content.res.Resources $ NotFoundException:
  字符串资源ID#0x32

#0x32(十六进制32)是'2'的整数值。如果您查看TextView documentation,您会看到setText的一些原型,第一个采用整体资源ID:

  

public final void setText(int resid)

解释了发生了什么。 '2'被视为一个整数,用于查找资源(不存在)。


newValue初始化为true而不是false也可能是个好主意,因为这应该是初始状态。否则,如果您的计算器在显示屏中以“0”开头,则按1按钮将为您01而不是1