解析整数导致安卓应用程序崩溃

3

我正在尝试制作一个计算器应用程序(只是为了熟悉Android开发),但经过一些测试,我注意到从“String tack1”进行parseInt转换会导致应用程序崩溃。有人能告诉我原因吗?我似乎无法弄清楚,我已经在互联网上搜索了相当长的时间。(呵呵,我是新手,请大家多多包涵)在下面的代码中,我修改了几行以使其看起来明显应该打印什么,但它仍然会崩溃。以下是代码:


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;

程序注释(一些重复的注释和其他内容):

tack1 = "1"; 的作用是使输出明显

tack1.trim() 用于处理空格

tack 中包含的是一个整数(不是负整数)

numOne 是一个整数,已经在代码中定义(不在此处列出)

抱歉,缩进都乱了(在 case 1 之后),因为我加了注释

这是我的 onClick 方法的一部分,所以关闭括号不包括在这里。

有人能帮帮我吗?谢谢:D


1
你能否发布崩溃时的Logcat输出?这样我们就可以看到抛出了什么样的异常。 - slayton
1个回答

4
我愿意打赌,实际上在调用parseInt后的以下行代码中程序崩溃了。
您正在对TextView调用setText(int)。当您将一个int传递给此方法时,该int是指向字符串资源的指针...您可能希望自动转换为字符串。由于您将其生成的int传递给应用程序,因此极不可能该int也指向res/values/strings.xml文件中的字符串资源。您真正想要做的是首先将numOne更改为字符串,这可以在一行内完成:
更改
answer.setText(numOne);

to

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

并且您可以开始了。

它运行了!非常感谢!但是,由于我是个新手,我不知道您所说的指向字符串资源的整数是什么意思。这是否意味着因为我的整数是在程序中生成的,所以整数变量并不代表存储字符串的内存地址的值?如果是这样,为什么不应该这样做? - Dr. Danger
字符串资源本质上是国际化应用程序的构建块(支持多种语言,几乎不需要额外的代码)。如果您感兴趣,我可以进一步解释,但您可以在Google上轻松查找这些内容。请查看/res/values/文件夹下的项目。有一个string.xml文件,您可以通过名称定义字符串。每次构建应用程序时,构建过程都会生成R.java文件,其中包含一堆int常量,您可以在应用程序中使用它们,例如R.string.my_custom_string等。 - Rich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接