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

标签 java android json gson

我正在使用 Gson 和 Retrofit 解析 JSON 字符串。我有这个 JSON 字符串:

{"message":["Email has already been taken"]}

我仍然得到以下异常,但不知道为什么:

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)

请知道如何获取message字段值的人帮帮我。

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

    }
}

更新 我将 body.toString() 分配给变量,不知何故它起作用了。

String response = body.string();

BaseApiDto errorDto = adapter.fromJson(response);

最佳答案

之所以成功,是因为我没有两次调用 body.string()

我将 body.toString() 分配给变量,不知何故它起作用了。

String response = body.string();

BaseApiDto errorDto = adapter.fromJson(response);

关于java.io.EOFException : End of input at line 1 column 1 path $ in Gson parser 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468539/

相关文章:

java - 如何根据 Java 中给定的一组比较器对作为字符串的 TreeMap 键进行排序

Java程序CopyFile将一个文件复制到另一个文件

java - 使用 EAS 构建构建应用程序时出现 "expo-location:compileReleaseJavaWithJavac"错误

java - 应用程序引擎预热请求不适用于端点

android - 如何在运行时生成 ImageView

java - 有没有一种方法可以很好地使用 gson 来获取包含 java 中具有 4 个变量的数组的列表

php - Cron Job - 如何在特定日期的两次之间执行脚本?

java - 如何使用 if else 和 while 循环创建用于计算菜单价格的 java 代码

javascript - 为什么javascript代码的输出不稳定

java - 使用 FT 搜索检索父文档时出现延迟