Android Integer.parseInt отрицательное число - PullRequest
2 голосов
/ 03 мая 2020

Я новичок в разработке, извините, если мой вопрос очень прост. Я разрабатываю приложение для D & D. Когда пользователь вставляет число в первый текст редактирования, я использую onTextChanged для текста редактирования, поэтому я устанавливаю текст для второго текста редактирования.

Моя проблема возникает только в том случае, если флажок установлен. Если флажок не установлен, он работает нормально, но если флажок установлен, приложение получит сумму (proficiditybonus + mod). Это работает, но только для положительных чисел. Когда приложение устанавливает значение ve -5, приложение вылетает. Все данные сохраняются в общих настройках.

checkBox_strength.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(checkBox_strength.isChecked()) {

                float result_num;
                int num1, num2;
                int f= 0;

                DecimalFormat df = new DecimalFormat("0.##########");

                num1 = Integer.parseInt(proficiencybonus.getText().toString());

                if (strength_mod.getText().toString().length() > 0) {
                    num2 = Integer.parseInt(strength_mod.getText().toString());

                } else {
                    num2=f;

                }

                result_num = num1 + num2;
                strength_save.setText(" = " + df.format(result_num));


                editor.putBoolean("checkBox_strength", true);
                editor.apply();
            }else{
                editor.putBoolean("checkBox_strength", false);
                editor.apply();
            }
        }
    });

Пробовал что-то другое, но я не могу go найти решение

float result_num;
                int num1, num2;
                int f= 0;

                DecimalFormat df = new DecimalFormat("0.##########");

                num1 = Integer.parseInt(proficiencybonus.getText().toString());

                if (strength_mod.getText().toString().length() > 0) {
                    num2 = Integer.parseInt(strength_mod.getText().toString());

                } else {
                    num2=f;

                }

                result_num = num1 + Math.abs(num2);
                strength_save.setText(" = " + df.format(result_num));

Это моя ошибка кражи sh, происходит сбой "num2 = Integer.parseInt (force_mod.getText (). ToString ());"

2020-05-03 17:09:24.440 10318-10318/jekanapplication.charactersheet5e E/AndroidRuntime: FATAL EXCEPTION: main
Process: jekanapplication.charactersheet5e, PID: 10318
java.lang.NumberFormatException: For input string: "−1"
    at java.lang.Integer.parseInt(Integer.java:608)
    at java.lang.Integer.parseInt(Integer.java:643)
    at jekanapplication.charactersheet5e.MainActivity$51.onCheckedChanged(MainActivity.java:1394)
    at android.widget.CompoundButton.setChecked(CompoundButton.java:172)
    at android.widget.CompoundButton.toggle(CompoundButton.java:128)
    at android.widget.CompoundButton.performClick(CompoundButton.java:133)
    at android.view.View$PerformClick.run(View.java:24931)
    at android.os.Handler.handleCallback(Handler.java:808)
    at android.os.Handler.dispatchMessage(Handler.java:101)
    at android.os.Looper.loop(Looper.java:166)
    at android.app.ActivityThread.main(ActivityThread.java:7529)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

enter image description here

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Не полный ответ ...

У вас есть непечатаемые символы, которые выглядят как -1, но на самом деле (в шестнадцатеричном формате):

E2 88 92 31

(чтобы попробовать себя скопировать - вставить в текстовый редактор, который поддерживает шестнадцатеричное отображение - кодировка сохраняется через браузер и копировать-вставить.)

31 - это просто ASCII di git 1, но "-" - это символ Unicode кодируется как UTF-8

U+2212 e2 88 92 MINUS SIGN

Например, если вы сделали ту же самую копию-вставку на PID: 10318 в трассировке, это:

3130333138

, что является просто ASCII

Так что вам нужно выяснить, почему текстовое представление возвращает кодированный в UTF-8 символ Unicode для знака минус. Я бы начал с языковых кодировок.

(ASCII для знака минус - 2D шестнадцатеричный).

0 голосов
/ 07 мая 2020

Проблема в том, как установить текст во втором тексте редактирования, использовать onTextchange первого текста редактирования, я установил текст edittext.settext «-2». Я изменил в edittext.settext «R.String.two_», поэтому я получаю текст, у меня нет проблем, когда я получаю строку.

0 голосов
/ 03 мая 2020

В XML определите этот атрибут: android:inputType="numberSigned"

...