Gson десериализовать с null int не может работать - PullRequest
1 голос
/ 08 января 2012

Когда я загружаю данные в Интернете, иногда это работает, а иногда нет.И моя проблема в одном int: runtime: ""

runtime - это int, и когда я использую gson, он может вызвать эту проблему:

01-07 21:22:57.602: E/AndroidRuntime(2726): Caused by: java.lang.NumberFormatException: Invalid int: ""

, и я попытался в некоторыхоператор if, но он не работает.

public int getRuntime() {
    if(Integer.valueOf(runtime)==null){
        return 0;
    }else{
        return runtime;
    }
}

или даже

public int getRuntime() {
    if(Integer.valueOf(runtime).equals(null)){
        return 0;
    }else{
        return runtime;
    }
}

, но ничего не работает.

Ответы [ 4 ]

5 голосов
/ 08 января 2012

Integer.valueOf () ожидает строку, представляющую целое число. Вызов его с пустой строкой приведет к исключению . Вам нужно проверить строку, прежде чем анализировать ее как целое число:

int runtime;
if ("".equals(string)) {
    runtime = 0;
}
else {
    runtime = Integer.parseInt(string);
}

или, если вы всегда хотите, чтобы время выполнения равнялось 0, если строка не является допустимым целым числом, то перехватите исключение:

try {
    runtime = Integer.parseInt(string);
}
catch (NumberFormatException e) {
    runtime = 0;
}

Теперь, это gson, который анализирует строку для вас, и эта строка не всегда является целым числом, тогда поле runtime должно быть не int, а String. И вы должны разобрать его самостоятельно, как показано выше.

Учитывая ваш вопрос, прежде чем пытаться что-либо делать с gson и android, вы должны изучить основы языка Java. Похоже, вы не понимаете систему типов в Java и что такое исключения. Читать http://docs.oracle.com/javase/tutorial/java/nutsandbolts/

2 голосов
/ 29 ноября 2012

Обрабатывайте среду выполнения как строку, объявляйте ее как строку в классе, в котором вы десериализуетесь.

Тогда использование gson, как это, будет правильно обрабатывать нули

Gson gson = new GsonBuilder().serializeNulls().create();

Это также работает при сериализации, обычно, если значения равны нулю, в json просто ничего не помещается для сериализации.

2 голосов
/ 08 января 2012

Похоже, вы не понимаете, что такое исключения или как их обрабатывать:

http://docs.oracle.com/javase/tutorial/essential/exceptions

public int getRuntime() {

    int i = 0;

    try {
        i = Integer.valueOf(runtime);
    } catch (NumberFormatException e) {
        System.out.println("runtime wasn't an int, returning 0");
    }

    return i;

}

Подсказка: какой бы ни была среда выполнения, это не таквсе, что может быть преобразовано в Int.Из того, что вы разместили, это выглядит как пустая строка

1 голос
/ 08 января 2012

Вам сначала нужно проверить runtime, например, if( runtime.isEmpty() ) или еще лучше - используя apache commons lang - if( StringUtils.isBlank( runtime )) или поймать брошенный NumberFormatException.

...