改造 2 错误:java.lang.IllegalStateException:预期为 BEGIN_OBJECT 但在第 6 行第 1 列路径为 STRING [英] Retrofit 2 Error:java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 6 column 1 path
问题描述
帮我解决这个问题,代码如下
Help Me for this issue, please code is as follow
活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TaskData taskData= new TaskData();
taskData.setEmail("praik@gmail.com");
Task task= new Task();
task.setTaskData(taskData);
Log.v("@@@WWE"," Call Initiated");
task.setTask("getUserDetail");
JSONObject taskDatas= new JSONObject();
JSONObject taskM= new JSONObject();
try {
taskDatas.put("email","praik@gmail.com");
taskM.put("task","getUserDetail");
taskM.put("taskData",taskDatas);
} catch (JSONException e) {
e.printStackTrace();
}
Map<String,JSONObject> taskMap= new HashMap<>();
taskMap.put("reqObject",taskM);
getUserDetails(taskMap);
Log.v("@@@WWE"," Call Over");
}
public void getUserDetails(Map<String,JSONObject> task){
ServiceInterfaceApi interfaceApi= ServiceClass.getApiService();
Call<UserList>call=interfaceApi.getUserDetails(task);
Log.v("@@@WWE","Retrofit Request Method = "+call.request().method());
Log.v("@@@WWE","Retrofit Request Body = "+call.request().body());
Log.v("@@@WWE","Retrofit Request Url = "+call.request().url());
Log.v("@@@WWE","Retrofit Request executed = "+call.isExecuted());
call.enqueue(new Callback<UserList>() {
@Override
public void onResponse(Call<UserList> call, Response<UserList> response) {
Log.v("@@@","Response");
if (response.isSuccessful()){
Log.v("@@@","Sucess");
userList=response.body().getUserData();
for (int i = 0; i < userList.size(); i++) {
UserDatum userDatum=userList.get(i);
Log.v("@@@@WWE"," USer Email "+userDatum.getEmail());
Log.v("@@@@WWE"," USer Name "+userDatum.getName());
Log.v("@@@@WWE"," USer Gender "+userDatum.getGender());
}
}
if(response.code()==400){
Toast.makeText(Home.this,"400 code ",Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<UserList> call, Throwable t) {
Log.v("@@@WWE","Failure "+t.getMessage());
}
});
}
服务接口
@Headers("Content-Type: application/json")
@POST("index.php")
Call<UserList>getUserDetails(@QueryMap Map<String,JSONObject> stringTaskMap);
服务类
public class ServiceClass {
public ServiceClass() {
}
private static Retrofit getRetroClient(){
Gson gson = new GsonBuilder()
.setLenient()
.create();
return new Retrofit.Builder()
.baseUrl(HttpConstants.baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
public static ServiceInterfaceApi getApiService(){
return getRetroClient().create(ServiceInterfaceApi.class);
}
}
Pojo 类:
public class UserList {
@SerializedName("userData")
@Expose
private List<UserDatum> userData = null;
@SerializedName("code")
@Expose
private Integer code;
@SerializedName("message")
@Expose
private String message;
public List<UserDatum> getUserData() {
return userData;
}
public void setUserData(List<UserDatum> userData) {
this.userData = userData;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public class UserDatum {
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
@SerializedName("name")
@Expose
private String name;
@SerializedName("image")
@Expose
private String image;
@SerializedName("mobile")
@Expose
private String mobile;
@SerializedName("birth_date")
@Expose
private String birthDate;
@SerializedName("dateofregister")
@Expose
private String dateofregister;
@SerializedName("gender")
@Expose
private String gender;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getBirthDate() {
return birthDate;
}
public void setBirthDate(String birthDate) {
this.birthDate = birthDate;
}
public String getDateofregister() {
return dateofregister;
}
public void setDateofregister(String dateofregister) {
this.dateofregister = dateofregister;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
预期响应
{"userData":[{"email":"foo@mail.com","password":"12345","name":"foo bar","image":"foo","mobile":"123","birth_date":"12345646","dateofregister":"1493706304000","gender":"male"}],"code":200,"message":"DONE"}
这是我的错误信息失败 java.lang.IllegalStateException: 预期为 BEGIN_OBJECT 但在第 6 行第 1 列路径 $ 处为 STRING提前致谢
here is my error message Failure java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 6 column 1 path $ Thanks in Advance
推荐答案
我认为问题不在于您的代码,只需检查您的服务器日志,您的服务器发送给您的 json 字符串与您当前的匹配预期输出 json
I think problem is not in your code just check your server log, what json string your server send to you match with your current expected output json
要检查服务器输出,您可以使用 postman 或 restclient - 只需传递您的 url、方法和参数
To check server output you can use postman or restclient - just pass your url ,method ,and parameter
其次,建议您使用可序列化的 pojo 类,例如
secondly ill suggest you to user serializable pojo class like
public class UserList implements Serializable {
}
public class UserDatum implements Serializable {
}
发送到服务器的对象必须实现Serializable或parcelable接口
我使用过这样的东西 GsonConverterFactory.create()
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ROOT)
.client(defaultHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
这篇关于改造 2 错误:java.lang.IllegalStateException:预期为 BEGIN_OBJECT 但在第 6 行第 1 列路径为 STRING的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!