安卓应用程序.简单的计算器崩溃



我是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 时是应用程序崩溃的时间。我觉得这是一个简单的错误,我只是看过了。 任何帮助将不胜感激。

提前感谢!

日志猫值:

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.txt05-15 02:39:46.427:W/ResourceType(540(:获取资源编号0x00000032的值时没有包标识符05-15 02:39:46.427: D/Android运行时(540(:关闭虚拟机05-15 02:39:46.427:W/dalvikvm(540(:threadid=1:线程退出并出现未捕获的异常(组=0x409c01f8(05-15 02:39:46.437:E/Android运行时(540(:致命异常:main05-15 02:39:46.437: E/AndroidRuntime(540(: android.content.res.Resources$NotFoundException: 字符串资源 ID #0x3205-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(: at 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.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

对日志猫的格式感到抱歉。

您可能想看一些事情。

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

display.setText('1');

和:

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

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

致命异常:主 05-15 02:39:46.437: E/Android运行时(540(:
android.content.res.Resources$NotFoundException:
字符串资源 ID #0x32

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

公共最终无效集文本(int resid(

这解释了正在发生的事情。'2'被视为整数,并用于查找资源(不存在(。


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

最新更新