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

계산기 어플을 만들려고 하는데 계속 튕기는 문제와 keeps stopping 오류가 뜹니다.

0 추천
public class MainActivity extends AppCompatActivity {
    private DecimalFormat decimalFormat = new DecimalFormat("#,###");
    private EditText number1, number2, number3;
    private TextView result;
    private String rs = "";
    private String rs2 = "";
    private String rs3 = "";
    private String rrs = "";
    private Button calculateButton;
    /*// number1 소수점 처리
    TextWatcher watcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (!TextUtils.isEmpty(charSequence.toString()) && !charSequence.toString().equals(rs)) {
                rs = decimalFormat.format(Double.parseDouble(charSequence.toString().replaceAll(",", "")));
                number1.setText(rs);
                number1.setSelection(rs.length());
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };*/

    /*// number2 소수점 처리
    TextWatcher watchernum2 = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (!TextUtils.isEmpty(charSequence.toString()) && !charSequence.toString().equals(rs2)) {
                rs2 = decimalFormat.format(Double.parseDouble(charSequence.toString().replaceAll(",", "")));
                number2.setText(rs2);
                number2.setSelection(rs2.length());
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };*/
   /* // number3 소수점 처리
    TextWatcher watchernum3 = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (!TextUtils.isEmpty(charSequence.toString()) && !charSequence.toString().equals(rs3)) {
                rs3 = decimalFormat.format(Double.parseDouble(charSequence.toString().replaceAll(",", "")));
                number3.setText(rs3);
                number3.setSelection(rs3.length());
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };
    // result 소수점 처리
    TextWatcher watcherresult = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if(!TextUtils.isEmpty(charSequence.toString()) && !charSequence.toString().equals(rrs)) {
            rrs = decimalFormat.format(Double.parseDouble(charSequence.toString().replaceAll(",","")));
            result.setText(rrs);

        }
        }*/

      //  @Override
     //   public void afterTextChanged(Editable editable) {

    //    }
   // };

    // 환산취득가액 계산 관련 메서드 처리
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        number1 = (EditText) findViewById(R.id.number1);
     //   number1.addTextChangedListener(watcher);
        number2 = (EditText) findViewById(R.id.number2);
     //   number2.addTextChangedListener(watchernum2);
        number3 = (EditText) findViewById(R.id.number3);
     //   number3.addTextChangedListener(watchernum3);
        calculateButton = (Button) findViewById(R.id.calculateButton);
        result = (TextView) findViewById(R.id.result);
     //   result.addTextChangedListener(watcher);
        calculateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Long n1 = Long.parseLong(number1.getText().toString());
                Long n2 = Long.parseLong(number2.getText().toString());
                Long n3 = Long.parseLong(number3.getText().toString());
                result.setText(Double.toString(n1 * n3 / n2));

            }
        });
    }

}


안드로이드 스튜디오로 현재 계산기 어플을 공부 삼아 만들고 있습니다. 제가 만드는 어플은 아무래도 계산하는 액수가 큰 경우가 많기에 자바 코드에서 숫자에 콤마가 들어가도록 했는데 숫자콤마가 들어간 뒤로 한자리나 두자리 숫자 계산은 가능하지만 세자리 즉 콤마가 들어가게되는 숫자일 경우 계산이 안되고 오류가 나거나 그냥 튕기는데 혹시 오류를 좀더 자세히 알거나 확인할 수 있는 방법이 있을까요? 부탁드립니다.

티베리우스 (140 포인트) 님이 2019년 8월 20일 질문
티베리우스님이 2019년 8월 21일 수정
watcher를 보여주셔야...;
방금 수정했습니다. ㅎㅎ

1개의 답변

0 추천

Long n1 = Long.parseLong(number1.getText().toString()); 이부분에서

number1에 쉼표가 들어가서 형변환 오류가 납니다.

TextWatcher 에서 처리한 것과 마찬가지로 .replaceAll(",", "") 을 붙어 쉼표를 제거해 주세요.

n2, n3 마찬가지고요.

 

result.addTextChangedListener(watcher);

이부분 오타도 있네요. watcher를 watcherresult로 바꿔주시구요.

 

로그캣만 보아도 쉽게 알 수 있는 오류이니 알아보시기 바랍니다.

 

얼룩얼룩 (890 포인트) 님이 2019년 8월 22일 답변
...