исключение формата числа недействительно int

Мне нужно добавить значения в мой sq lite из списка. В моем представлении списка есть два текста редактирования и текстовое представление. Я просто хочу получить значение из каждого текста редактирования и умножить его на соответствующее значение текстового представления. когда я запускаю приложение, мне не нужно вводить данные для каждого редактируемого текста. из-за этого я заканчиваю «исключением числового формата: недействительный int». Из других примеров я могу понять, что умножение на нулевое значение может вызвать ошибку. как я могу пропустить нулевое значение, содержащее тексты редактирования, из итерации? это мой код

protected void InsertDb() {
// TODO Auto-generated method stub
 DatabaseHelper databasecontroller = new DatabaseHelper(Orders.this);
 List<Map<String, String>> data = null;
 data = new ArrayList<Map<String, String>>();

   if(list != null){

        for(int i = 0; i< list.getChildCount();i++){

            View vie = list.getChildAt(i);

            EditText ed1= (EditText) vie.findViewById(R.id.cases);
            EditText ed2 = (EditText) vie.findViewById(R.id.pcs);
            String qty = ed1.getText().toString();

           TextView tv = (TextView)findViewById(R.id.srp);
           String imsrpv= tv.getText().toString();

            float srps = Float.valueOf(imsrpv);
            int qtys = Integer.valueOf(qty);
           float amts = srps * qtys; 
           String amount = Float.toString(amts);

           datanum.put("A",qty );
            datanum.put("B",ed2.getText().toString() );
           datanum.put("L", amount);

            Log.d("value of amnt",amount);

            databasecontroller.entercustdetails(datanum); 
        }

           }
   Log.v("compleated", data.toString());
}

Заранее спасибо..


person Bivin    schedule 16.03.2016    source источник
comment
stackoverflow .com/questions/10735679/   -  person saeed    schedule 16.03.2016
comment
Если я правильно вас понимаю, у вас не возникнет проблем с разбором допустимой строки для плавающей, если строка состоит из числовых/значений с плавающей запятой, верно? Вы только хотите убедиться, что значение не равно нулю, не так ли?   -  person Opiatefuchs    schedule 16.03.2016
comment
почти. У меня есть альтернативные пустые значения в списке. Поэтому, когда я пытаюсь перебрать список, я просто хочу пропустить все незаполненные тексты редактирования между ними. Возможно ли это?   -  person Bivin    schedule 16.03.2016
comment
да, смотрите мой ответ....   -  person Opiatefuchs    schedule 16.03.2016


Ответы (2)


Проверьте, является ли возвращаемое значение из edittext правильным числом или оно не является нулевым. Если есть нулевое значение, это может привести к исключению числового формата. если оба верны, то вы также можете

float srps=0.0;
int qtys=0;
 try
{
  srps = Float.valueOf(imsrpv);
  qtys = Integer.valueOf(qty);
}
catch (NumberFormatException e)
{
srps =//Default value you want;
qtys =//Default value you want;
}

Надеюсь, что это работает..

person Ankur1994a    schedule 16.03.2016
comment
когда я использую оба метода, я получаю сообщение об ошибке. Мой текст редактирования находится в виде списка, и список немного велик. Я не хочу вводить значения при каждом редактировании текстов. Я хочу выполнять умножение только в введенных полях . - person Bivin; 16.03.2016
comment
если вы оставите пустым текст редактирования, он даст пустую строку и выдаст исключение NumberFormatException. у вас есть обработка этого исключения. как я редактирую свой ответ. - person Ankur1994a; 16.03.2016
comment
спасибо, но у меня вопрос, как пропустить пустые тексты редактирования из списка. Я пробовал разные циклы, но получаю только первое вычисленное значение. - person Bivin; 16.03.2016
comment
в этом случае, если вы пропустите пустой текст редактирования, он будет автоматически обработан. только вы должны указать значение по умолчанию, если текст редактирования пуст в блоке catch. - person Ankur1994a; 16.03.2016
comment
да. Это дает расчет тех же значений списка.. спасибо - person Bivin; 16.03.2016

Ваша проблема не в том, как вы проанализировали значения. Для объяснения:

parseFloat(), parseInt() вернет примитивный тип int и float, а valueOf() вернет новый тип Integer и Float. Кроме того, parseInt(), parseFloat() распознают знаки плюс и минус, а valueOf() — нет. В этом разница между этими двумя типами/методами. Кажется, ваша проблема в том, что значение пусто, и вы можете просто избавиться от этого:

//set a default float and int

float srps = 0.0;
int qtys = 0;

//now parse the values by checking if the strings are not null or empty
if(imsrpv!=null&&!imsrpv.isEmpty()){

srps = Float.valueOf(imsrpv);

} 

if(qty!=null&&!qty.isEmpty()){

qtys = Integer.valueOf(qty);
}

Как я уже сказал, если эти значения имеют знак плюс или минус и это важно для ваших нужд, вам следует использовать метод разбора. Кроме того, вам не нужен новый тип Integer или Float, поэтому правильнее использовать метод parse().

person Opiatefuchs    schedule 16.03.2016
comment
Привет, этот метод действительно работал для меня. Но все же у меня есть проблема: когда я ввожу значение и прокручиваю вниз, то же значение автоматически появляется для других записей. а расчет происходит по какой-то другой величине. у вас есть идеи? - person Bivin; 16.03.2016
comment
хорошо, но это совсем другая проблема. Я думаю, что проблема, которую Вы задали здесь, решена ответом. Проблема, которую вы сейчас описали, заключается в том, что ListViews перерабатывает свое содержимое, как только содержимое становится невидимым. Для этого вам нужно использовать шаблон Viewholder и создать новый вопрос. См. здесь шаблон просмотра: javacodegeeks.com/2013/09/ - person Opiatefuchs; 16.03.2016