改造 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

查看:57
本文介绍了改造 2 错误:java.lang.IllegalStateException:预期为 BEGIN_OBJECT 但在第 6 行第 1 列路径为 STRING的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

帮我解决这个问题,代码如下

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆