2011-09-19 142 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