마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드로 계산기를 만드는 도중 오류가 발생합니다.

0 추천

제가 계획하고 있는 어플은 계산방법이 이미 정해진 계산기이며, 고액이 주로 나오기 때문에 데이터 타입을 Long 타입으로 해야 

정확한 값이 나오더군요. 그래서 예시값을 입력하면 정확한 계산은 나오지만 그러나 아무런 숫자를 입력하지 않고 계산 버튼을 누를 경우 다음과 같은 오류화면이 나오고 튕깁니다. 


    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6294) 
        at android.view.View$PerformClick.run(View.java:24770) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.Long.parseLong(Long.java:602)
        at java.lang.Long.parseLong(Long.java:632)
        at org.techtown.myfirstapplication.MainActivity.MyOnClick(MainActivity.java:45)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6294) 
        at android.view.View$PerformClick.run(View.java:24770) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

코드는 이렇습니다.

TextView result;   // 계산된 결과 값을 저장하는 변수
EditText number1, number2, number3; // 계산하기 위한 값들
Button calculateButton; // 계산버튼


// 환산취득가액 계산 관련 메서드 처리
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        }
public void MyOnClick(View view) {

    number1 = findViewById(R.id.number1);
    // number1.addTextChangedListener(watcher);
    number2 = findViewById(R.id.number2);
    //  number2.addTextChangedListener(watchernum2);
    number3 = findViewById(R.id.number3);
    //  number3.addTextChangedListener(watchernum3);
    result = findViewById(R.id.result);
    //  result.addTextChangedListener(watcherresult);

    calculateButton = findViewById(R.id.calculateButton);

    // 계산 메서드

    long n1 = Long.parseLong(number1.getText().toString());
    long n2 = Long.parseLong(number2.getText().toString());
    long n3 = Long.parseLong(number3.getText().toString());
    result.setText(Long.toString(n1 * n2 / n3));
티베리우스 (140 포인트) 님이 2019년 12월 30일 질문

1개의 답변

0 추천
TextView result;   // 계산된 결과 값을 저장하는 변수
    EditText number1, number2, number3; // 계산하기 위한 값들
    Button calculateButton; // 계산버튼


    // 환산취득가액 계산 관련 메서드 처리
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        number1 = findViewById(R.id.number1);
        // number1.addTextChangedListener(watcher);
        number2 = findViewById(R.id.number2);
        //  number2.addTextChangedListener(watchernum2);
        number3 = findViewById(R.id.number3);
        //  number3.addTextChangedListener(watchernum3);
        result = findViewById(R.id.result);
        //  result.addTextChangedListener(watcherresult);

        calculateButton = findViewById(R.id.calculateButton);
    }
    public void MyOnClick(View view) {
        String a1 = number1.getText().toString();
        String a2 = number2.getText().toString();
        String a3 = number3.getText().toString();


        if (TextUtils.isEmpty(a1) || TextUtils.isEmpty(a2) || TextUtils.isEmpty(a3)){
            return;
        }

        // 계산 메서드
        long n1 = Long.parseLong(a1);
        long n2 = Long.parseLong(a2 );
        long n3 = Long.parseLong(a3);

        result.setText(Long.toString(n1 * n2 / n3));
    }

다음과 같이 바꿔주세요.

editText값이 없는 채로 버튼 클릭 시 빈 공백값을 Long형으로 변환 시에 문제가 생겨 에러가 터진 듯 하네요

Tonze (520 포인트) 님이 2019년 12월 31일 답변
정말 감사합니다. ㅠㅠ 몇시간동안 고생해서 안되니까 빡쳐서 놓고 있었는데 알려주신대로 하니까 해결되었습니다. ㅎㅎ
...