【问题标题】:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $ AND Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 接受格式错误的 JSON,并且预期 BEGIN_OBJECT 但在第 1 列第 1 行路径 $ 为 STRING
【发布时间】:2020-06-09 00:00:43
【问题描述】:

我正在使用此方法执行我的应用程序的每个发布方法:

1-这是我执行 get 和 post 方法的界面:

@POST("feedback/challenge/newRating")
Call<IncreasedChallengeFeedback> challengeFeedbackIncreaseRating(@Body IncreasedChallengeFeedback increasedFeedbackChallenge);

2- 调用方法

public void increaseRatingCFb(IncreasedChallengeFeedback increasedChallengeFeedback) {

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://10.0.2.2:3000/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    api = retrofit.create(INodeJS.class);

    Call<IncreasedChallengeFeedback> call = api.challengeFeedbackIncreaseRating(increasedChallengeFeedback);
    call.enqueue(new Callback<IncreasedChallengeFeedback>() {
        @Override
        public void onResponse(Call<IncreasedChallengeFeedback> call, Response<IncreasedChallengeFeedback> response) {
            if (!response.isSuccessful()) {
                System.out.println("!= Successful" + response.code());
                return;
            }
        }

        @Override
        public void onFailure(Call<IncreasedChallengeFeedback> call, Throwable t) {
            System.out.println("OnFailure: " + t.getMessage());
        }
    });
}

3- 这里我只是创建了一个类的对象来与方法一起使用

holder.likeButton.setOnLikeListener(new OnLikeListener() {
        @Override
        public void liked(LikeButton likeButton) {

         IncreasedChallengeFeedback icfb = new IncreasedChallengeFeedback("8","2");
         increaseRatingCFb(icfb);

        }

4- 最后是它的类

public class IncreasedChallengeFeedback {


private String cFeedbackRating;
private String cFeedbackID;

public IncreasedChallengeFeedback(String cFeedbackRating, String cFeedbackID) {
    this.cFeedbackRating = cFeedbackRating;
    this.cFeedbackID = cFeedbackID;
}

}

有了这个我得到了这个错误:

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

所以我添加了这个:

Gson gson = new GsonBuilder()
            .setLenient()
            .create();

然后错误变成这样:

Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

问题是我完成了所有其他帖子并使用该方法获取方法,然后突然我陷入了这个错误。

【问题讨论】:

    标签: java android android-studio retrofit retrofit2


    【解决方案1】:

    您的 JSON 对象很可能格式不正确。打印您收到的 JSON 对象以查看它是否有任何格式错误。此处提出了相同的问题,因此请查看更多信息:https://stackoverflow.com/a/28418787/13709773

    【讨论】:

    • 我该怎么做?我通常只是创建一个对象,然后将其转换为 JSON,但由于某种原因,它没有给我那个错误。我对其他所有发布方法都做了完全相同的程序
    • 您可以像这样创建类:gist.github.com/voghDev/0bd7050a675ee0f31e51 并将其添加到 RetrofitBuilder 中,如第一条评论中所述。然后,当您拨打电话时,原始 JSON 将出现在您的日志中。
    • 之后我得到这个:“ATAL EXCEPTION: OkHttp Dispatcher”和“java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONArray”
    • 如果使用 okhttp 3+,请看这里:gist.github.com/voghDev/…
    猜你喜欢
    • 2017-02-16
    • 2017-06-03
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多