Как добавить различные editText в один TextView

Я новичок в программировании, и мне нужна ваша помощь, у меня ошибка при вставке числа в editText txt50, приложение вылетает, пожалуйста, помогите мне, я не знаю, в чем ошибка:

код:

public class Main2Activity extends AppCompatActivity {

   private EditText cinco, cien, doscientos, quinientos, mil, dosmil, cincomil, diezmil, veintemil, cincuentamil, cienmil;
    private TextView diezmob;

    public static final String nombres = "names";
    TextView txtBienvenido;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        txtBienvenido = (TextView) findViewById(R.id.txtbienvenido);
        String usuario = getIntent().getStringExtra("names");
        txtBienvenido.setText("¡Bienvenido(a) Hermano(a) " + usuario + "!");

        diezmob = (TextView) findViewById(R.id.txtdiezmob);
        cinco = (EditText) findViewById(R.id.txt50);
        cien = (EditText) findViewById(R.id.txt100);
        doscientos = (EditText) findViewById(R.id.txt200);
        quinientos = (EditText) findViewById(R.id.txt500);
        mil = (EditText) findViewById(R.id.txt1000);
        dosmil = (EditText) findViewById(R.id.txt2000);
        cincomil = (EditText) findViewById(R.id.txt5000);
        diezmil = (EditText) findViewById(R.id.txt10000);
        veintemil = (EditText) findViewById(R.id.txt20000);
        cincuentamil = (EditText) findViewById(R.id.txt50000);
        cienmil = (EditText) findViewById(R.id.txt100000);

        cinco.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) {

                    if ((cinco.toString().equals("")) && (!cinco.toString().equals(null)) && (cinco.toString().isEmpty() || (cinco.toString().length() >= 0))) {
                        double valor1 = Double.parseDouble((cinco.getText().toString()));
                        double valor2 = Double.parseDouble((cien.getText().toString()));
                        double valor3 = Double.parseDouble((doscientos.getText().toString()));
                        double valor4 = Double.parseDouble((quinientos.getText().toString()));
                        double valor5 = Double.parseDouble((mil.getText().toString()));
                        double valor6 = Double.parseDouble((dosmil.getText().toString()));
                        double valor7 = Double.parseDouble((cincomil.getText().toString()));
                        double valor8 = Double.parseDouble((diezmil.getText().toString()));
                        double valor9 = Double.parseDouble((veintemil.getText().toString()));
                        double valor10 = Double.parseDouble((cincuentamil.getText().toString()));
                        double valor11 = Double.parseDouble((cienmil.getText().toString()));
                        double suma = (valor1 * 50) + (valor2 * 100) + (valor3 * 200) + (valor4 * 500) + (valor5 * 1000) + (valor6 * 2000) + (valor7 * 5000) + (valor8 * 10000) + (valor9 * 20000) + (valor10 * 50000) + (valor11 * 100000);
                        String resultado = String.valueOf((int) suma);
                        diezmob.setText(String.valueOf(resultado));
                    } else {
                        diezmob.setText("0");
                    }
                }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    } }

LogCat: Ошибка при вставке числа в editText txt50, приложение вылетает:

java.lang.NumberFormatException: Invalid double: ""

Возможный дубликат java.lang.numberformateexception: неверный двойной: " "

Martin Zeitler 09.04.2019 02:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Давайте оценим это:

if ((cinco.toString().equals("")) && (!cinco.toString().equals(null)) && (cinco.toString().isEmpty() || (cinco.toString().length() >= 0))) {
                        double valor1 = Double.parseDouble((cinco.getText().toString()));

Вы говорите, что если («cinco - пустая строка») и (не нуль) и ((isEmpty (то же, что и пустая строка)) или длина >= 0), затем проанализируйте двойной

Я почти уверен, что единственный раз, когда это оценивается как true, - это если cinco пуст, что приведет к исключению NumberFormatException, потому что вы пытаетесь проанализировать cinco для двойного, пока он пуст. Вам придется обрабатывать исключения с помощью блока try-catch:

try {
    double valor1 = Double.parseDouble((cinco.getText().toString()));
} catch (NumberFormatException e) {
    e.printStackTrace();
}

или создайте операторы if, которые не позволяют оценить cinco, если он пуст:

if (cinco.toString() != null && !(cinco.toString().isEmpty() {
    double valor1 = Double.parseDouble((cinco.getText().toString()));
} 

редактировать: все Double.parseDouble в вашем коде будут генерировать NumberFormatExceptions, а не только cinco, кстати. Это просто первый, поэтому этот ответ применим ко всем анализам.

Мы оба опубликовали похожие ответы, я не видел ваших, потому что тем временем писал свой. Я не уверен, следует ли мне удалять или нет, но пока я сохраню это, и, возможно, это поможет ОП.

BrainDead 09.04.2019 02:58

@AlbertoPoljak Я имею в виду, что это зависит от вас, но я ценю хедз-ап.

brandonx 09.04.2019 03:01

@brandonx, спасибо за ответ. Я хотел бы знать, как мне выполнить textWatcher, когда я набираю любой editText, и показать мне результат в diezmob TextView?.

Jair Vides 09.04.2019 15:40

@JairVides зависит от того, как вы хотите это спроектировать, но вы, вероятно, написали бы общий TextWatcher, в котором вы регистрируете все свои EditTexts, и заключаете все Parse.doubles в отдельные try-catches, чтобы не пытаться выполнять вычисления на пустом струны. Я думаю, что лучшим вариантом было бы вместо этого иметь кнопку, которая активирует вычисление (хотя вам все равно понадобятся операторы try-catch или if, обрабатывающие пустые тексты редактирования).

brandonx 09.04.2019 18:29

Спасибо @brandonx, как мне сделать это с помощью кнопки?

Jair Vides 09.04.2019 20:22
Ответ принят как подходящий

Я устраняю эту ошибку с помощью этого кода, любая ошибка, пожалуйста, сообщите об этом.

package com.example.josue.login;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;

import java.util.Calendar;


public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private TextView diezmob;

    public static final String nombres = "names";
    TextView txtBienvenido;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        txtBienvenido = (TextView) findViewById(R.id.txtbienvenido);
        String usuario = getIntent().getStringExtra("names");
        txtBienvenido.setText("¡Bienvenido(a) Hermano(a) " + usuario + "!");

        diezmob = (TextView) findViewById(R.id.txtdiezmob);

        findViewById(R.id.btncalcular).setOnClickListener(this);
        findViewById(R.id.btncalcular5).setOnClickListener(this);
        findViewById(R.id.btncalcular10).setOnClickListener(this);
        findViewById(R.id.btncalcular15).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.btncalcular:

                double cinco, cien, doscientos, quinientos, mil, dosmil, cincomil, diezmil, veintemil, cincuentamil, cienmil;

                String Cinco = ((EditText) findViewById(R.id.txt50)).getText().toString();
                String Cien = ((EditText) findViewById(R.id.txt100)).getText().toString();
                String Doscientos = ((EditText) findViewById(R.id.txt200)).getText().toString();
                String Quinientos = ((EditText) findViewById(R.id.txt500)).getText().toString();
                String Mil = ((EditText) findViewById(R.id.txt1000)).getText().toString();
                String Dosmil = ((EditText) findViewById(R.id.txt2000)).getText().toString();
                String Cincomil = ((EditText) findViewById(R.id.txt5000)).getText().toString();
                String Diezmil = ((EditText) findViewById(R.id.txt10000)).getText().toString();
                String Veintemil = ((EditText) findViewById(R.id.txt20000)).getText().toString();
                String Cincuentamil = ((EditText) findViewById(R.id.txt50000)).getText().toString();
                String Cienmil = ((EditText) findViewById(R.id.txt100000)).getText().toString();

                if (Cinco != null && !Cinco.equals("")) {
                    cinco =  Double.valueOf(Cinco);

                }else{
                    cinco = 0;

                }

                if (Cien != null && !Cien.equals("")){
                    cien =   Double.valueOf(Cien);

                }else{
                    cien=0;

                }

                if (Doscientos != null && !Doscientos.equals("")) {
                    doscientos =  Double.valueOf(Doscientos);

                }else{
                    doscientos=0;

                }

                if (Quinientos != null && !Quinientos.equals("")) {
                    quinientos = Double.valueOf(Quinientos);

                }else{
                    quinientos = 0;

                }
                if (Mil != null && !Mil.equals("")){
                    mil = Double.valueOf(Mil);

                }else{
                    mil = 0;

                }
                if (Dosmil != null && !Dosmil.equals("")) {
                    dosmil = Double.valueOf(Dosmil);

                }else {
                    dosmil = 0;

                }
                if (Cincomil != null && !Cincomil.equals("")) {
                    cincomil = Double.parseDouble(Cincomil);

                }else {
                    cincomil = 0;

                }
                if (Diezmil !=null && !Diezmil.equals("")) {
                    diezmil = Double.valueOf(Diezmil);

                }else {
                    diezmil = 0;

                }

                if (Veintemil != null && !Veintemil.equals("")) {
                    veintemil = Double.valueOf(Veintemil);

                }else {
                    veintemil = 0;

                }

                if (Cincuentamil != null && !Cincuentamil.equals("") ) {
                    cincuentamil = Double.valueOf(Cincuentamil);

                }else {
                    cincuentamil = 0;

                }

                if (Cienmil != null && !Cienmil.equals("")    ) {
                    cienmil = Double.valueOf(Cienmil);

                }else {
                    cienmil = 0;

                }



                double suma = (cinco * 50) + (cien * 100) + (doscientos * 200) + (quinientos * 500) + (mil * 1000) +
                            (dosmil * 2000) + (cincomil * 5000) + (diezmil * 10000) + (veintemil * 20000) + (cincuentamil * 50000) +
                            (cienmil * 100000);
                    String resultado = String.valueOf((int)(suma));
                    diezmob.setText(String.valueOf(resultado));

                break;

            case R.id.btncalcular5:

                Intent i = new Intent(this, Main5Activity.class);
                i.putExtra("dato",diezmob.getText().toString());
                startActivity(i);

                break;

            case R.id.btncalcular10:
                Intent ii = new Intent(this, Main5Activity.class);
                startActivity(ii);
                break;

            case
                    R.id.btncalcular15:
                Intent iii = new Intent(this, Main5Activity.class);
                startActivity(iii);
                break;

            default:
                break;
        }
    }
}

Другие вопросы по теме