java.io.EOFException: End of input at line 1 column 1 path $ in Gson parser

10,080

It worked because I didn't call body.string() twice.

I assign body.toString() to variable, somehow it worked.

String response = body.string();

BaseApiDto errorDto = adapter.fromJson(response);
Share:
10,080
Huy Tower
Author by

Huy Tower

​Huy Tower --- Flutter Developer | Senior Android Developer --- Skype: huytower Location : Ho Chi Minh, Viet Nam

Updated on June 19, 2022

Comments

  • Huy Tower
    Huy Tower almost 2 years

    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<BaseApiDto> 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);