com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:需要字符串,但在第1行第39列路径$.message处为开始_OBJECT

hgtggwj0  于 2022-11-06  发布在  Go
关注(0)|答案(1)|浏览(209)

我正在使用retrofit在android中创建登录函数。我已经创建了一个用于登录验证的端点,然后我使用Postman使用raw(json)测试了它,它工作了。但是当我使用retrofit将端点输入到android中时,我得到了这样的错误消息:

语法异常:java.lang.IllegalStateException:需要字符串,但在第1行第39列路径$.message处为开始_OBJECT

有人能帮我吗?
所以这里我的来源:

Api客户端

public class ApiClient {

    public static final String BASE_URL = "";
    public static Retrofit retrofit;

    public static Retrofit getRetrofit() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }

        return retrofit;
    }

}

验证界面

public interface AuthInterface {

    @Headers("Content-Type: application/json")
    @POST("auth/login")
    Call<AuthPost> authPostCall(@Body String body);
}

授权发布

public class AuthPost {

    @SerializedName("status")
    private String status;
    @SerializedName("error_code")
    private int error_code;
    @SerializedName("message")
    private String message;
    @SerializedName("token")
    private String token;

    ...getter and setter
}

登录活动

JSONObject payload = new JSONObject();
                try {
                    payload.put("login_username", loginUsernameText);
                    payload.put("login_password", loginPasswordText);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                Call<AuthPost> authPostCall = authInterface.authPostCall(payload.toString());
                authPostCall.enqueue(new Callback<AuthPost>() {
                    @Override
                    public void onResponse(Call<AuthPost> call, Response<AuthPost> response) {
                        if (response.code() == 200) {

                        } else {

                        }
                    }

                    @Override
                    public void onFailure(Call<AuthPost> call, Throwable t) {
                        t.printStackTrace();
                    }
                });
ibrsph3r

ibrsph3r1#

是否确定:

@SerializedName("message")
    private String message;

如果此字段是Object,通常会出现此错误。您的JSON看起来像

"message":"test"

或者类似于:

"message":{"field":"value"}

如果是第二个变量,那么你应该简单地将字段更改为必要的类型。

相关问题