当前位置: 首页 > 知识库问答 >
问题:

使用JsonReader。setLenient(true)在第1行第1列接受格式错误的JSON-改装

上官淮晨
2023-03-14

当我尝试访问我的Web服务,在onFailure我得到JsonReader.setLenient(true)接受畸形JSON在第1行第1列路径$在LogCat. i可以从POSTMAN得到响应

这是邮差的回复

{
    "status": true,
    "message": "order status updated"
} 

在线更新

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

        retrofit = new Retrofit.Builder()
                            .baseUrl("https://example.com/sample/")                    
                            .client(client)
    .addConverterFactory(GsonConverterFactory.create())
                            .build();
        token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9";
        id_order= 288;
        status="process";
        update();

方法

public void update(){
        WebserviceAPI apiService =retrofit.create(WebserviceAPI.class);
        Call<UpdateOrderResponse> call = apiService.updateOrder("pickorder",token,id_order,status);
        call.enqueue(new Callback<UpdateOrderResponse>() {
            @Override
            public void onResponse(Call<UpdateOrderResponse> call, Response<UpdateOrderResponse> response) {

                UpdateOrderResponse result = response.body();
                Log.d("orderstatus", "body: "+result);
                returnstatus=result.isStatus();
                msg= result.getMessage();

                if(returnstatus){
                    Log.d("orderstatus","status ok");
                }else{
                    Log.d("orderstatus","status not ok");
                }
            }

            @Override
            public void onFailure(Call<UpdateOrderResponse> call, Throwable t) {
                Log.d("proceedFail",""+t.getMessage());

            }
        });

    }

PHP服务响应

$response = ['status' => true,
        'message' => "order status updated",
         ];
$this->returnJson($response);

UpdateOrderResponse模块类

public class UpdateOrderResponse {
    boolean status;
    String message;

    public boolean isStatus() {
        return status;
    }    
    public void setStatus(boolean status) {
        this.status = status;
    }    
    public String getMessage() {
        return message;
    }    
    public void setMessage(String message) {
        this.message = message;
    }
}

使现代化

我添加了gson。设置Lenient()以进行改装。就像下面

Gson gson = new GsonBuilder()
                .setLenient()
                .create();
retrofit = new Retrofit.Builder()
                .baseUrl("https://example.com/sample/")
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

然后得到另一个错误在onFailure它是预期BEGIN_OBJECT但在第1行是STRING

OkHttp: <-- 200 OK https://........
OkHttp: {"status":true,"message":"order status updated"}
D/OkHttp: <-- END HTTP (99-byte body)    
proceedFail: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

共有1个答案

闾丘永春
2023-03-14

当您使用GSON来解析您的响应时,我们需要在模型类中使用@SerializedName和@Exposetags。请用下面的代码替换您的UpdateOrder响应:

public class UpdateOrderResponse {

    @SerializedName("status")
    @Expose
    private Boolean status;

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

    public Boolean getStatus() {
        return status;
    }

    public void setStatus(Boolean status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}
 类似资料:
  • 这个错误是什么?我怎样才能解决这个问题?我的应用程序正在运行,但无法加载数据。这是我的错误:使用JsonReader.setLenient(true)在第1行第1列路径$接受格式错误的JSON 这是我的片段: 请求接口: 总是这个错误不是关于你的json,它可能来自你的错误请求,为了更好地处理,首先在邮递员中检查你的请求,如果你得到了响应,然后将你的json响应与你的模型进行比较,如果没有错误,那

  • 我想通过php party将数据添加到MySQL。但是我一直失败。检查网站上的数据。仍然没有解决方案。我哪里出错了? 我尝试了以下方法,但似乎无法解决问题。如何修复“使用JsonReader”。setLenient(true)在Android Studio中的第1行第1列path$'错误处接受格式错误的JSON,并使用JsonReader。setLenient(true)在第1行第1列路径接受格式

  • 我试图解决这个错误,但我做不到。 运行时得到的错误 09-03 07:45:34.436 602-6020/fyp.hotelreservationsystemver2 e/recyclerview:没有连接适配器;跳过布局09-03 07:45:34.465 602-6020/fyp.hotelreservationsystemver2 D/reservationmainactivity:[{“

  • 我试图将数据发布到API,但出现以下错误: 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON$ 有人知道怎么解决这个问题吗? 在活动中发布数据的代码 Api接口。JAVA 邮寄ist.java API应该返回

  • 试图使用Refundation以JSON格式发送信息,但它进入Refundation的方法并抛出以下错误: 到目前为止,我已经尝试使用以下链接中的答案来解决这个问题:1)改型API异常?2) 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON$ 这是我的代码: 改装接口: 与连接相关的主要活动: 用户类别: 服务器端希望JSON如下所示: 我知道st

  • 我正在尝试为我的应用程序创建忘记密码脚本。当我运行我的apk并尝试保留我的密码时,我得到了一个错误,上面写着使用JsonReader。setLenient(true)要在第1行第1列路径$Error处接受格式错误的JSON,我的apk中一切正常,我可以登录、注销或注册,但当我重置密码时,我得到了JsonReader。设置宽容(真)错误。我的apk json正在工作,它是正确的。请帮帮我。我在分享我