Как отправить данные с помощью дооснащения и получить ответ в правильном формате? - PullRequest
0 голосов
/ 22 января 2019

Я получаю исключение

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $

при вызове запроса POST.

В соответствии с этим ответом в моем ответе json действительно есть фигурные скобки {}.

сначала мой ответ json был -

{
    "status": {
        "status": "1",
        "message": "Entry inserted successfully"
    },
    "data": {
        "date": "24-Mar-2226",
        "month": "March",
        "party_name": "mark"
    }
}

, затем я объединил два отдельных объекта в один объект ответа -

{
   "response": {
       "status": {
           "status": "1",
           "message": "Entry inserted successfully"
       },
       "data": {
           "date": "24-Mar-2226",
           "month": "March",
           "party_name": "mark"
       }
   }
}

, но все равно получаю то же самоеошибка.

Запрос GET с модификацией работает нормально, но не запрос POST.

Это мой запрос POST-

  @POST("AddEntry")
    Call<ResponseClass> addMyEntry(@Body DetailsClass details);

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Пожалуйста, используйте структуру ниже класса.

Эта проблема является общей для большинства разработчиков, просто разбирающихся в структуре и идущих дальше.

public class ResponseData {
 @SerializedName("response")
  public Response response;
 }

  public class Response {
 @SerializedName("status")
 public Status status;

 @SerializedName("data")
 public Data data;
}

public class Status {
 @SerializedName("status")
 public String status;

 @SerializedName("message")
 public String message;
}

public class Data {
 @SerializedName("date")
 public String date;

 @SerializedName("month")
 public String month;

 @SerializedName("party_name")
 public String party_name;
}
0 голосов
/ 22 января 2019

Исключение говорит о том, что свойство, помеченное вами как String, но в JSON это объект.

С JSON это:

{
   "response": {
       "status": {
           "status": "1",
           "message": "Entry inserted successfully"
       },
       "data": {
           "date": "24-Mar-2226",
           "month": "March",
           "party_name": "mark"
       }
   }
}

У вас должно быть несколько классов, как показано ниже:

public class Response {
 @SerializedName("status")
 public Status status;

 @SerializedName("data")
 public Data data;
}

public class Status {
 @SerializedName("status")
 public String status;

 @SerializedName("message")
 public String message;
}

public class Data {
 @SerializedName("date")
 public String date;

 @SerializedName("month")
 public String month;

 @SerializedName("party_name")
 public String party_name;
}
...