NumberFormatException: Неверный BigInteger

Вот часть моего кода:

public class Result extends Fragment{

     BigInteger sumCipher = BigInteger.ZERO;

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.result, container, false);
         return rootView;
     }

     @Override
     public void onStart() {
         super.onStart();

         new AsyncGetSumCipher().execute();
     }        

     public void setSumCipher(BigInteger sum){
         this.sumCipher = sum;
     }

     public BigInteger getSumCipher(){
         return sumCipher;
     }
}

Класс AsyncGetSumCipher, очевидно, содержит doInBackground и onPostExecute. Последнее выглядит следующим образом:

protected void onPostExecute(StringBuilder result) {
 super.onPostExecute(result);

     BigInteger bi = new BigInteger(result.toString());

     setSumCipher(bi);
}

Вот ошибка

Кто-нибудь может мне помочь? Я застрял на этом уже несколько недель :(


person Mag    schedule 27.12.2017    source источник
comment
Не могли бы вы опубликовать трассировку стека?   -  person Kartik Arora    schedule 27.12.2017
comment
Также опубликуйте свой AsyncGetSumCipher, который, похоже, выполняет некоторую обработку значений   -  person Kushan    schedule 27.12.2017
comment
Вы зарегистрировали значение result.toString()? это большой?   -  person MilanNz    schedule 28.12.2017
comment
@KartikArora отредактировано!   -  person Mag    schedule 28.12.2017
comment
@MilanNz result.toString() дает нам 694727847752, что является строкой   -  person Mag    schedule 28.12.2017


Ответы (2)


Я предполагаю, что ваш result.toString() возвращает недопустимый bigInt. Пожалуйста, зарегистрируйте его и посмотрите, каково значение.

Это взято из документации Oracle:

Конструктор BigInteger: public BigInteger(String val)

Преобразует десятичное строковое представление BigInteger в BigInteger. Представление String состоит из необязательного знака минус, за которым следует последовательность из одной или нескольких десятичных цифр. Преобразование символа в цифру обеспечивается Character.digit. Строка не может содержать посторонних символов (например, пробелов).

Параметры: val - десятичное строковое представление BigInteger.

Выдает: NumberFormatException — val не является допустимым представлением BigInteger.

Смотрите также:

Character.digit(char, int)

https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String)

person MilanNz    schedule 27.12.2017
comment
result.toString должен возвращать строку, верно? При регистрации он дает нам 694727847752. Конструктор BigInteger принимает строку в качестве параметра. Так почему я получаю эту ошибку? :( - person Mag; 28.12.2017
comment
@Mag убедитесь, что у вас нет пробела перед первым числом, также попробуйте жестко закодировать это число в конструкторе только для проверки. Я бы так и сделал, но, к сожалению, меня нет рядом с моей драгоценной машиной :) - person MilanNz; 28.12.2017
comment
Я жестко закодировал номер, и ошибки нет. Он правильно зарегистрирован как 694727847752. - person Mag; 28.12.2017

Проблема решилась следующим образом:

BigInteger bi = new BigInteger(result.toString().trim().replaceAll("\"",""));
person Mag    schedule 28.12.2017
comment
Это означает, что result.toString() возвращает значение в кавычках? - person Rudy Velthuis; 31.12.2017
comment
@Rudy Velthuis Да, он возвращает 694727847752 - person Mag; 01.01.2018
comment
Это странно. Я думал, что StringBuilder возвращает простые строки? - person Rudy Velthuis; 02.01.2018
comment
@Rudy Velthuis Я новичок в Android, я действительно не знаю - person Mag; 03.01.2018