Retrofit 사용시 NumberformatException 발생시..


간혹 숫자로 변환시 빈값으로 들어오는 경우 뱉는 오류 중 하나가 NumberformatException 이다.


이럴경우 Adapter를 하나 등록하면 된다.


public class EmptyStringToNumberTypeAdapter extends TypeAdapter<Number> {
@Override
public void write(JsonWriter jsonWriter, Number number) throws IOException {
if (number == null) {
jsonWriter.nullValue();
return;
}
jsonWriter.value(number);
}

@Override
public Number read(JsonReader jsonReader) throws IOException {
if (jsonReader.peek() == JsonToken.NULL) {
jsonReader.nextNull();
return null;
}

try {
String value = jsonReader.nextString();
if ("".equals(value)) {
return 0;
}
return Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}



만드는 쪽에서 


private static Gson getGson(){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Integer.class , new EmptyStringToNumberTypeAdapter())
.registerTypeAdapter(int.class, new EmptyStringToNumberTypeAdapter())
.registerTypeAdapter(double.class, new EmptyStringToNumberTypeAdapter())
.registerTypeAdapter(Double.class, new EmptyStringToNumberTypeAdapter());

Gson gson = gsonBuilder.create();
return gson;
}


public static Retrofit initRetrofit() {

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Variable._SERVER_HOST)
.client(Common.getClient())
.addConverterFactory(GsonConverterFactory.create(getGson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit;
}

이상입니다.. 


+ Recent posts