我如何解决此错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
How do I solve this error Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我正在开发一个带有 django restframework 后端的项目,我已经完成了后端并测试了它是否正常工作,但现在我想将我的 android 应用程序连接到 API,但此时我想在成功注册后获取此 resposnse 并获取一些数据以在下一个 activity 中使用,尽管数据已保存在数据库中
但我遇到了错误
这是我的 APIClient 接口 class
package com.example.covid_19_tracker.data.network;
import com.example.covid_19_tracker.data.network.model.AddLocationResponse;
import com.example.covid_19_tracker.data.network.model.LoginResponse;
import com.example.covid_19_tracker.data.network.model.RegisterDeviceResponse;
import com.example.covid_19_tracker.data.network.model.RegisterUserResponse;
import java.util.HashMap;
import io.reactivex.Observable;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface ApiInterface {
@FormUrlEncoded
@POST("api/locations/")
Observable<AddLocationResponse> addLocation(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/devices/")
Observable<RegisterDeviceResponse> registerDevice(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/accounts/register/")
Observable<RegisterUserResponse> registerUser(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/accounts/login/")
Observable<LoginResponse> loginUser(@FieldMap HashMap<String, Object> params);
}
这是我的 RegisterUserResponse.java 模型 Class
package com.example.covid_19_tracker.data.network.model;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class RegisterUserResponse {
@SerializedName("success")
@Expose
private String success;
@SerializedName("status_code")
@Expose
private Integer status_code;
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private ArrayList data = new ArrayList();
@SerializedName("token")
@Expose
private String token;
public RegisterUserResponse() {
}
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public Integer getStatus_code() {
return status_code;
}
public void setStatus_code(Integer status_code) {
this.status_code = status_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ArrayList getData() {
return data;
}
public void setData(ArrayList data) {
this.data = data;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
但我收到错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我是 android 的初学者。谢谢
您的数据字段不是您在 RegisterUserResponse
class
中指定的 ArrayList
您需要创建一个 Data
class 来包含字段 id
username
password
...
然后在您的 RegisterUserResponse
class 中声明:
@SerializedName("data")
@Expose
private Data data;
而不是:
@SerializedName("data")
@Expose
private ArrayList data = new ArrayList();
我正在开发一个带有 django restframework 后端的项目,我已经完成了后端并测试了它是否正常工作,但现在我想将我的 android 应用程序连接到 API,但此时我想在成功注册后获取此 resposnse
这是我的 APIClient 接口 class
package com.example.covid_19_tracker.data.network;
import com.example.covid_19_tracker.data.network.model.AddLocationResponse;
import com.example.covid_19_tracker.data.network.model.LoginResponse;
import com.example.covid_19_tracker.data.network.model.RegisterDeviceResponse;
import com.example.covid_19_tracker.data.network.model.RegisterUserResponse;
import java.util.HashMap;
import io.reactivex.Observable;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface ApiInterface {
@FormUrlEncoded
@POST("api/locations/")
Observable<AddLocationResponse> addLocation(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/devices/")
Observable<RegisterDeviceResponse> registerDevice(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/accounts/register/")
Observable<RegisterUserResponse> registerUser(@FieldMap HashMap<String, Object> params);
@FormUrlEncoded
@POST("api/accounts/login/")
Observable<LoginResponse> loginUser(@FieldMap HashMap<String, Object> params);
}
这是我的 RegisterUserResponse.java 模型 Class
package com.example.covid_19_tracker.data.network.model;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class RegisterUserResponse {
@SerializedName("success")
@Expose
private String success;
@SerializedName("status_code")
@Expose
private Integer status_code;
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private ArrayList data = new ArrayList();
@SerializedName("token")
@Expose
private String token;
public RegisterUserResponse() {
}
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public Integer getStatus_code() {
return status_code;
}
public void setStatus_code(Integer status_code) {
this.status_code = status_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ArrayList getData() {
return data;
}
public void setData(ArrayList data) {
this.data = data;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
但我收到错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 我是 android 的初学者。谢谢
您的数据字段不是您在 RegisterUserResponse
class
您需要创建一个 Data
class 来包含字段 id
username
password
...
然后在您的 RegisterUserResponse
class 中声明:
@SerializedName("data")
@Expose
private Data data;
而不是:
@SerializedName("data")
@Expose
private ArrayList data = new ArrayList();