Как исправить ошибку «Использовать JsonReader.setLenient (true), чтобы принять неверно сформированный JSON в строке 1 путь 1 путь $» в Android Studio - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь отправить данные в API, но получаю эту ошибку:

Используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1, путь 1, столбец 1 $

Кто-нибудь знает, как это исправить?

Код для отправки данных в активность

private void callList(){
    String signature = new String(Hex.encodeHex(DigestUtils.md5(
            TMK + appId + appVersion +
                    SessionManager.getSession(getApplicationContext(), getString(R.string.session_token)))
    ));

    Call<PostGetList> postGetListCall = mApiInterface.postGetList(
            appId,
            appVersion,
            SessionManager.getSession(getApplicationContext(), getString(R.string.session_token)),
            signature);

    postGetListCall.enqueue(new Callback<PostGetList>() {
        @Override
        public void onResponse(Call<PostGetList> call, Response<PostGetList> response) {
            status = response.body().getStatus();
            Utils.logcat("Recv getInfo Status " + status);
            if (status.equals(getString(R.string.rc00))) {
                Message.message(getApplicationContext(), "Success");
            } else {
                Message.message(getApplicationContext(), status);
            }
        }

        @Override
        public void onFailure(Call<PostGetList> call, Throwable t) {
            String responseMsg = "Fail to connect";
            Utils.logcat(responseMsg);
            Toast.makeText(getApplicationContext(), responseMsg, Toast.LENGTH_LONG).show();
            Utils.logcat(t.toString());
        }
    });
}

ApiInterface.java

@FormUrlEncoded
@POST("List.php")
Call<PostGetList> postGetList(@Field("appId") String appId,
                              @Field("appVersion") String appVersion,
                              @Field("token") String token,
                              @Field("signature") String signature);

PostGetList.java

public class PostGetList {
    @SerializedName("status")
    String status;
    @SerializedName("data")
    String data;

    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }

    public String getData() {
        return data;
    }
    public void setData(String data) {
        this.data = data;
    }
}

API должен вернуть

{ “status”:”00”,
  ”data”:”List Data”}

Ответы [ 3 ]

0 голосов
/ 11 октября 2019

модель PostGetListKredit соответствует json, но вы используете ответ PostGetList, а не PostGetListKredit. попробуйте: изменить PostGetList на PostGetListKredit

0 голосов
/ 11 октября 2019

Установить заголовок,

@Headers("Content-Type: application/json")

А также использовать Gson для преобразования json,

make sure that you have:
   compile 'com.google.code.gson:gson:2.6.1'

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

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .client(client)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

Для более подробного ответа следуйте по этой ссылке

0 голосов
/ 11 октября 2019

Вы уверены, что ваш ответ JSON не искажен? проверьте свой ответ на каком-либо сайте, например https://jsonlint.com/, чтобы убедиться, что ваш ответ правильный, json или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...