Java 改装2.0:应为BEGIN_对象,但在第1行第1列路径处为字符串$

Java 改装2.0:应为BEGIN_对象,但在第1行第1列路径处为字符串$,java,android,json,retrofit,retrofit2,Java,Android,Json,Retrofit,Retrofit2,我在postman上传递了一个更新用户请求并得到了成功的响应(见图),现在,当我尝试在我的应用程序中使用改型2执行相同操作时,我得到的错误是com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_对象,但在第1行第1列路径$处是字符串。有趣的是,我之前遇到过这个错误,我知道如果我的模型与响应不一致,通常会发生这种情况。但是这一次我想我已经检查了所有的框,但是我得到了错误。如果有人能找出我错在哪里 我

我在postman上传递了一个更新用户请求并得到了成功的响应(见图),现在,当我尝试在我的应用程序中使用改型2执行相同操作时,我得到的错误是
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_对象,但在第1行第1列路径$
处是字符串。有趣的是,我之前遇到过这个错误,我知道如果我的模型与响应不一致,通常会发生这种情况。但是这一次我想我已经检查了所有的框,但是我得到了错误。如果有人能找出我错在哪里

我在《邮递员》中的回应:

我的Pojo:

package com.example.evidya.Retrofit.Model.EditModel;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class EditResponse {
    @SerializedName("result")
    @Expose
    private String result;

    @SerializedName("response_code")
    @Expose
    private Integer responseCode;

    @SerializedName("msg")
    @Expose
    private String msg;

    @SerializedName("data")
    @Expose
    private List<Object> data = null;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public Integer getResponseCode() {
        return responseCode;
    }

    public void setResponseCode(Integer responseCode) {
        this.responseCode = responseCode;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<Object> getData() {
        return data;
    }

    public void setData(List<Object> data) {
        this.data = data;
    }

}
改装接口:

@FormUrlEncoded
@PUT("user/update_user")
Call<EditResponse> updateUser(
    @HeaderMap Map<String, String> headers,
    @Field("user_id") String id,
    @Field("email") String email,
    @Field("name") String name,
    @Field("phone") String phone,
    @Field("access_token") String accessToken
);
@FormUrlEncoded
@PUT(“用户/更新用户”)
呼叫更新程序(
@HeaderMap映射头,
@字段(“用户id”)字符串id,
@字段(“电子邮件”)字符串电子邮件,
@字段(“名称”)字符串名称,
@字段(“电话”)字符串电话,
@字段(“访问令牌”)字符串accessToken
);
我的HTTP响应:

我的代码:

private void saveRequest() {
    Log.d(TAG, "saveRequest: "+loginResponseData.getId());
    progressDialog.setMessage("Updating...");
    progressDialog.show();
    String name, email, mobile;

    name = mName.getText().toString();
    email = mEmail.getText().toString();
    mobile = mPhoneNumber.getText().toString();

    Call<EditResponse> editResponseCall = evidya.updateUser(Common.getHeaders(), loginResponseData.getId(), email, name, mobile, loginResponseData.getAccessToken());
    editResponseCall.enqueue(new Callback<EditResponse>() {
        private int retryCount = 0;

        @Override
        public void onResponse(Call<EditResponse> call, Response<EditResponse> response) {
            progressDialog.dismiss();
            if(!response.isSuccessful()){
                Toast.makeText(Edit_AccountActivity.this, ""+response.message(), Toast.LENGTH_SHORT).show();
                return;
            }

            EditResponse loginResponse = null;
            try {
                loginResponse = response.body();
            } catch (Exception e) {
                Log.d(TAG, "onResponse: error parsing"+e.toString());
            }

            if(loginResponse != null){
                if(loginResponse.getResult().toLowerCase().equals("success")){
                    Toast.makeText(Edit_AccountActivity.this, "Your details successfully updated", Toast.LENGTH_SHORT).show();
                } else{
                    Toast.makeText(Edit_AccountActivity.this, ""+loginResponse.getMsg(), Toast.LENGTH_SHORT).show();
                }

            } else{
                Toast.makeText(Edit_AccountActivity.this, "Invalid Response from server", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<EditResponse> call, Throwable t) {
            Log.d(TAG, "onFailure: "+t.toString());
            Toast.makeText(Edit_AccountActivity.this, ""+t.getMessage(), Toast.LENGTH_SHORT).show();
            progressDialog.dismiss();
        }


    });
}
private void saveRequest(){
Log.d(标记“saveRequest:+loginResponsta.getId());
progressDialog.setMessage(“更新…”);
progressDialog.show();
字符串名称、电子邮件、手机;
name=mName.getText().toString();
email=mEmail.getText().toString();
mobile=mPhoneNumber.getText().toString();
调用editResponseCall=evidya.updateUser(Common.getHeaders(),loginResponsTa.getId(),email,name,mobile,loginResponsTa.getAccessToken());
editResponseCall.enqueue(新回调(){
private int retryCount=0;
@凌驾
公共void onResponse(调用、响应){
progressDialog.disclose();
如果(!response.issusccessful()){
Toast.makeText(编辑_AccountActivity.this,“+response.message(),Toast.LENGTH_SHORT.show();
返回;
}
EditResponse loginResponse=null;
试一试{
loginResponse=response.body();
}捕获(例外e){
d(标记“onResponse:error解析”+e.toString());
}
if(loginResponse!=null){
if(loginResponse.getResult().toLowerCase().equals(“success”)){
Toast.makeText(编辑_AccountActivity.this,“您的详细信息已成功更新”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(编辑_AccountActivity.this,“+loginResponse.getMsg(),Toast.LENGTH_SHORT.show();
}
}否则{
Toast.makeText(编辑_AccountActivity.this,“来自服务器的无效响应”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(标记“onFailure:+t.toString());
Toast.makeText(编辑_AccountActivity.this,“+t.getMessage(),Toast.LENGTH_SHORT.show();
progressDialog.disclose();
}
});
}

这通常发生在您从服务器收到预期响应以外的响应时。
若要了解问题所在,请尝试模仿《邮递员》中的请求,看看您从服务器收到了什么。
此外,您还可以打开它来查看服务器在日志猫中返回的内容。

add@Headers({“Accept:application/json”}) 为我改装接口工作

 @Headers({"Accept: application/json"})
 @POST("user/classes")
 Call<playlist> addToPlaylist(@Body PlaylistParm parm);
@Headers({“Accept:application/json”})
@POST(“用户/类”)
调用addToPlaylist(@Body playlipparm parm);

我已经这样做了,事实上,您可以在我发布的图像中检查我的OkHttp响应。很明显,您没有收到纯JSON响应。在你的json之前,我可以在你的回复正文中看到一个
SQL查询
。你做对了,伙计,现在我已经学会了在postman中检查html响应和json响应。这件事真的进入了我的脑海。非常感谢兄弟。“com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第1列路径$处为字符串。”当响应包含字符串而不是JSON数据时,通常会出现此错误。检查您是否得到正确的响应并传递正确的数据
 @Headers({"Accept: application/json"})
 @POST("user/classes")
 Call<playlist> addToPlaylist(@Body PlaylistParm parm);