3

だから私は電卓アプリを作ろうとしています(Android開発のコツをつかむためだけです)、いくつかのテストで、「String tack1」からのparseInt変換がアプリのクラッシュを引き起こしていることに気付きました。誰かが理由を教えてもらえますか? よくわからなくて、ずっとネットで調べていました。(hehe 私は初心者なので、簡単に行ってください) 以下のコードでは、何を印刷するのかが明確に見えるように数行を変更しましたが、それでもクラッシュします。コードは次のとおりです。


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;

プログラムに関する注意事項(一部のコメントは繰り返され、その他のものも同様):

タック1 = "1"; 出力を明確にすることです

tack1.trim() は空白を処理するためのものです

はい、タックにあるものはすべて数値と整数です(負の整数でさえありません)

はい numOne は整数であり、上記のように定義されています (ここにリストされているコードにはありません)

申し訳ありませんが、私が追加したコメントのために、インデントがすべて台無しになっています(ケース1の後)

これは私の onClick メソッドのセクションなので、閉じ括弧はここには含まれていません。

誰か助けてくれませんか?ありがとう:D

4

1 に答える 1

4

への呼び出しの後、次の行で実際にクラッシュしていると確信していますparseInt

setText(int)TextViewを呼び出しています。このメソッドに int を渡すと、その int は文字列リソースへのポインターになります...おそらく、文字列への自動変換を期待しているでしょう。アプリケーションで生成された int を渡すため、この int が res/values/strings.xml ファイル内の文字列リソースを指すことはほとんどありません。本当にやりたいことは、最初に numOne を文字列に変更することです。これはインラインで実行できます。

変化する

answer.setText(numOne);

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

そして、あなたは行ってもいいです。

于 2011-09-19T19:20:46.957 に答える