这个问题在这里已有答案:
我是新用的Retrofit和Gson,当我尝试使用POST方法向REST API发送请求时,我面临如下错误 .
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY但在第4行第14行路径为$ .data时为BEGIN_OBJECT
下面是我的java代码 .
private void sendRequest(CheckEmail checkEmail){
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<CheckEmail> call = apiService.getEmailStatus(checkEmail);
call.enqueue(new Callback<CheckEmail>() {
@Override
public void onResponse(Call<CheckEmail> call, Response<CheckEmail> response) {
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
CheckEmail checkEmail = gson.fromJson(String.valueOf(response.body().getData()), CheckEmail.class);
Toast.makeText(CheckEmailPage.this, "Successfull "+checkEmail, Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<CheckEmail> call, Throwable t) {
Toast.makeText(CheckEmailPage.this, "Something went wrong!", Toast.LENGTH_SHORT).show();
Log.e("Error Retrofit : ", String.valueOf(t));
}
});
}
以下是我的模型
public class CheckEmail {
private int code;
private String message;
private String[] data;
public CheckEmail(String message) {
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String[] getData() {
return data;
}
public void setData(String[] data) {
this.data = data;
}
}
这是我的类初始化URL和改进构建器
public class ApiClient {
public static final String BASE_URL = "https://f49d9d29-8471-4126-95b0-1ec3d18eda94.mock.pstmn.io/v1/";
private static Retrofit retrofit;
public static Retrofit getClient(){
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(logging);
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
以下是ApiInterface
public interface ApiInterface {
@POST("users/check_status")
Call<CheckEmail> getEmailStatus(@Body CheckEmail email);
}
这是我的json回复,我被邮差击中
{
"code": 1000,
"message": "OK",
"data": {
"id": "1",
"email": "test.test@gmail.com",
"status": "1",
"name": "testing",
"category": "2"
}
}
我的代码怎么了?先感谢您
2 回答
响应(即Response <>响应)已经解析 . 无需使用
gson builder
再次解析它 . 只需从响应中获取数据,如下所示:这里不需要使用gson builder:
checkEmail类中的数据不是字符串数组 .
用以下类替换数据 .
你的checkEmail类应该类似于以下内容(String []被Data类替换)