2012-05-15 2 views
-1

나는 안드로이드 개발을 처음 접했고, 나는 나의 첫 번째 실제 시도와 응용에 걸림돌을 만났다. 나는 간단한 계산기를 만들려고 노력하고있다. 그러나 응용 프로그램을 실행하고 시퀀스에 두 번째 숫자를 입력하면 에뮬레이터에 계산기가 추가됩니다. "불행히도 계산기가 작동을 멈췄습니다." 나는 logCat을 보았고 빨간 오류가 발생하여 모든 것을 게시 할 것이라고 생각하지 않습니다.Android App. Simple Calculator 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를 클릭하면 앱이 다운됩니다. 나는 그것이 지나치게 단순한 실수 인 것처럼 느낀다. 어떤 도움이라도 대단히 감사합니다.

감사합니다.

로그 캣 값 :

2월 5일부터 15일까지 : 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 : dalvikvm (540) : threadid = 1 : catch되지 않은 예외 (그룹 = 0x409c01f8)로 종료하는 스레드 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : 치명적인 예외 : 주 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : android.content.res.Resources $ NotFoundException : 문자열 리소스 ID # 0x32 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : android.content.res.Resources.getText (Resources.java:247) 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : 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) : android.view.View.performClick (View.java:3511) 05 : 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) : android.os.Handler.dispatchMessage (Handler.java:92) 05- 15 02 : 39 : 46.437 : E/AndroidRuntime (540) : android.os.Looper.loop (Looper.java:137) 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : android.app . 활동 T hread.main (ActivityThread.java:4424)05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : java.lang.reflect.Method.invoke (Method.java:511) 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : com.android.internal.os에서 .ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) 05-15 02 : 39 : 46.437 : E/AndroidRuntime (540) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) 0535 02 : 39 : 46.437 : E/AndroidRuntime (540) : dalvik.system.NativeStart.main (기본 메소드) 05-15 02 : 39 : 47.077 : I/dalvikvm (540) : threadid = 3 : 반응 중 3/신호 3 05-15 02 : 39 : 47.097 : I/dalvikvm (540) : 스택 추적을 '/data/anr/traces.txt'에 씁니다.

죄송합니다. logCat의 형식이 잘못되었습니다.

+0

"그래서 나는 그들 모두를 게시 할 것 같지 않습니다."- 당신은 적어도 몇 가지를 올리고 싶을 것입니다. 레이몬드 첸 (Raymond Chen)이 심령술을 파인 아트로 디버깅하는 동안 모든 사람이 잘 준비되어있는 것은 아닙니다 :-) 그리고 어떤 정보는 대개 어떤 것보다 낫습니다. – paxdiablo

+0

그리고 :'acuum'이 나에게 어색한 것처럼 보입니다. 누적 기는'accum'라고 불릴 것입니다. (문제는 아닐지라도). 그러나 문자열과 숯 ("2"와 같은)을 추가하는 다른 두 가지 가능성은 - 정성을 다하는 사람 (그 순간을보기에는 너무 지쳤습니다)입니까? 그리고,'newValue'가'false'보다는'true'로 초기화되어야한다고 생각합니다. (또한 디스플레이가 빈 문자열로 기본 설정되어 있는지보기에는 너무 지쳤습니다.) – 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 :
문자열 리소스 ID # 1 설정 0x32

#0x32 (16 진수 32) '2'의 적분 값이다.

공공 최종 무효의 setText (INT 잔유)

무슨 일이 일어나고 있는지 설명 : 당신이 TextView documentation 보면, 당신은 중요한 자원 ID를 취하는 첫 번째, setText에 대한 몇 가지 프로토 타입을 볼 수 있습니다 . '2'은 정수로 처리되며 리소스 (존재하지 않음)를 조회하는 데 사용됩니다. 즉 초기 상태해야하기 때문에


이 또한 사실이 아닌 거짓을 newValue를 초기화하는 것이 좋습니다 수 있습니다. 그렇지 않으면 디스플레이에 계산기가 "0"으로 시작하면 1 버튼을 누르면 1 대신 01이 표시됩니다.

+0

이것은 모든 것에 관한 자리입니다. 도와 주셔서 감사합니다! – Allz69