2012-05-15 3 views
-1

Я новичок в разработке Android, и я столкнулся с этой проблемой и своей первой реальной попыткой и приложением. Я пытаюсь сделать простой калькулятор. Однако, когда я запускаю приложение и вводю второе число в последовательности, которую нужно добавить в калькулятор, эмулятор говорит: «К сожалению, калькулятор перестает работать». Я посмотрел на logCat, и есть куча красных ошибок, поэтому я не думаю, что опубликую их все.Приложение для Android. Простой калькулятор Crashing

Мой код в залежах:

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: выход с отключенным исключением (группа = 0x409c01f8) 05-15 02: 39: 46.437: E/AndroidRuntime (540) : FATAL EXCEPTION: main 05-15 02: 39: 46.437: E/AndroidRuntime (540): android.content.res.Resources $ NotFoundException: Идентификатор ресурса строки # 0x32 05-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): на 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): 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 .ActivityT hread.main (ActivityThread.java:4424) 05-15 02: 39: 46.437: E/AndroidRuntime (540): at java.lang.reflect.Method.invokeNative (родной метод) 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 (родной метод) 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.

+0

«так что я не думаю, что опубликую их все» - вы можете опубликовать хотя бы несколько. Хотя Раймонд Чен имеет психическую отладку вплоть до изобразительного искусства, не все так хорошо оборудованы :-) И некоторая информация обычно лучше, чем никто. – paxdiablo

+0

И: 'acuum' кажется несоответствующим мне, аккумулятор будет называться' accum' (хотя и не имеет отношения к вашей проблеме). Но две другие возможности, добавляя строку и символ (например, '2''), - это кошерность (слишком усталая, чтобы посмотреть ее в данный момент)? И, я подозреваю, что 'newValue' должен быть инициализирован' true', а не 'false' (также слишком усталый, чтобы увидеть, по умолчанию на дисплее отображается пустая строка). – paxdiablo

+0

Спасибо за быстрый ответ! Я заброшу несколько ошибок: – Allz69

ответ

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:
Строка идентификатор ресурса # 0x32

#0x32 (шестнадцатеричный 32) представляет собой интегральное значение '2'. Если вы посмотрите на TextView documentation, вы увидите несколько прототипов для setText, первыми, который принимает интегральный идентификатор ресурса:

общественность окончательного недействительного SetText (интермедиат кубового остатки)

, который объясняет, что происходит , '2' обрабатывается как целое число и используется для поиска ресурса (которого не существует).


Он также может быть хорошей идеей, чтобы инициализировать newValue к истинным, а не ложным, так как это должно быть начальное состояние. В противном случае, если ваш калькулятор начнет с «0» на дисплее, нажатие кнопки 1 даст вам 01, а не 1.

+0

Это место обо всем. Спасибо за помощь! – Allz69

Смежные вопросы