Удалить начальный ноль в текстовом редакторе с пользовательской кнопки нуля в Android - PullRequest
0 голосов
/ 27 января 2019

Я использовал addTextChangedListener(new TextWatcher() для удаления начальных нулей, однако он работает только на программной клавиатуре Android numpad вместо моей пользовательской numpad. n0 - нулевая кнопка. в основном, когда я нажимаю нулевую кнопку, мое приложение вылетает.


    //custom zero button
            n0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        input1.append("0");
                        operationA();
                }
            });    

Мне просто нужен код, чтобы нулевая кнопка не возвращала никакого значения при нажатии, чтобы избежать начальных нулей. Ниже addTextChangedListener(new TextWatcher()


    input1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.toString().length() == 1 && s.toString().startsWith("0")) {
                    s.clear();
                }
            }
        });

Получение этих ошибок:


    AndroidRuntime: FATAL EXCEPTION: main
        Process: context, PID: 12408
        java.lang.NumberFormatException: empty String
            at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071)
            at java.lang.Double.valueOf(Double.java:511)
            at context.operationA(MainActivity.java:478)
            at context$17.onClick(MainActivity.java:383)
            at android.view.View.performClick(View.java:5610)
            at android.view.View$PerformClick.run(View.java:22265)
            at android.os.Handler.handleCallback(Handler.java:751)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6077)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

У меня была такая же проблема. Я решил это, написав функцию ниже:

private String trimLeadingZeros(String string)
{
    boolean startsWithZero = true;
    while (startsWithZero)
    {
        if(string.startsWith("0") && string.length()>=2 && !string.substring(1,2).equalsIgnoreCase("."))
        {string = string.substring(1, string.length());}
        else
        {startsWithZero = false;}
    }
    return  string;
}

Эта функция также предотвращает обрезку всех нулей в строке, например 00000.123 (она возвращает 0.123 вместо бесполезных .123).

0 голосов
/ 27 января 2019

ошибка произошла, когда вы пытаетесь проанализировать строку как double в методе operationA, но строка пуста, проверьте, не является ли строка пустым, прежде чем преобразовать ее

...