I'm parsing a JSON string by using Gson and Retrofit. I have this JSON string: {"message":["Email has already been taken"]}

I get the below exception still and don't know why: java.io.EOFException: End of input at line 1 column 1 path $ at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1393) at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:549) at com.google.gson.stream.JsonReader.peek(JsonReader.java:425) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:205) at com.google.gson.TypeAdapter.fromJson(TypeAdapter.java:260) at com.google.gson.TypeAdapter.fromJson(TypeAdapter.java:273)

People who know how to get the value of message field please help me.

BaseApiDto.java public class BaseApiDto { @SerializedName("message") public String[] message; public String getError() { return message[0]; } }

HandErrorUtils.java public static void handleError(FragmentActivity activity, Throwable e) { String msg = null; if(e instanceof HttpException){ // Error message in json Gson gson = new Gson(); TypeAdapter adapter = gson.getAdapter(BaseApiDto.class); ResponseBody body = ((HttpException) e).response().errorBody(); // Status code HttpException httpException = (HttpException) e; int statusCode = httpException.code(); if (statusCode == 500) { showErrorDialog(activity, activity.getString(R.string.dialog_msg_error_401), true); } else if (statusCode == 401) { showErrorDialog(activity, activity.getString(R.string.dialog_msg_error_401), true); } else { try { Timber.w("body.string() " + body.string()); // TODO : EXCEPTION HAPPEN IN HERE BaseApiDto errorDto = adapter.fromJson(body.string()); msg = errorDto.getError(); Timber.w("msg " + msg); } catch (Exception ex) { // TODO : EXCEPTION HAPPEN IN HERE ex.printStackTrace(); } showErrorDialog(activity, msg, false); } } }

UPDATE I assign body.toString() to variable, somehow it worked. String response = body.string(); BaseApiDto errorDto = adapter.fromJson(response);

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐