Я новичок в retrofit
(раньше я использовал volley
), до этого у меня все было в порядке с модернизацией, пока не появилась эта ошибка: -
com.google.gson.JsonSyntaxException : java .lang.IllegalStateException: ожидалось int, но было логическим в строке 8, столбец 37, путь $ .response.data.book_service_id
Я пробовал все решения, представленные на этом сайте, но не мог с собой поделать так как я новичок в retrofit
. Я думаю, что это из-за ошибки JSON parsing
. Я не знаю, как справиться с этим. Это может быть повторяющийся вопрос, но, пожалуйста, помогите. Ниже мой код:
Запрос и выборка данных:
private void makeBookingRequest(String position) {
final CustomProgressDialog dialog = new CustomProgressDialog();
dialog.show(getSupportFragmentManager(),"tag");
SharedPreferences preferences = getSharedPreferences("MYSharedPref",MODE_PRIVATE);
String sessionkey = preferences.getString("sessionkey",null);
System.out.println(sessionkey);
String serviceId = position;
System.out.println(position);
APIEndPoints endPoints = Url.getInstance().create(APIEndPoints.class);
Call<Book> call = endPoints.makeBookingRequest(serviceId,sessionkey);
call.enqueue(new Callback<Book>() {
@Override
public void onResponse(Call<Book> call, retrofit2.Response<Book> response) {
dialog.dismiss();
if (!response.isSuccessful()) {
Toast.makeText(HomeActivity.this, "server is not responding", Toast.LENGTH_SHORT).show();
}
else if(response.body() != null){
Book bookData = response.body();
String message = bookData.response.message;
Toast.makeText(HomeActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Book> call, Throwable t) {
dialog.dismiss();
Toast.makeText(HomeActivity.this, "Error" + t.getLocalizedMessage(),
Toast.LENGTH_SHORT).show();
System.out.println(t);
}
});
}
Модель класса:
package com.medpal.medpal_client.Models;
import com.google.gson.annotations.SerializedName;
public class Book {
@SerializedName("response")
public ResponseEntity response;
public class ResponseEntity{
@SerializedName("data")
public DataEntity data;
@SerializedName("secondary_message")
public String secondary_message;
@SerializedName("message")
public String message;
@SerializedName("code")
public int code;
}
public class DataEntity {
@SerializedName("book_service_id")
public int book_service_id;
}
}
APIENDPOINTS
@FormUrlEncoded
@Headers({"apikey: testapikey", "Content-Type:application/x-www-form-urlencoded" })
@POST("service/accept?")
Call<Book> makeBookingRequest(
@Field("service_id") String ServiceId,
@Field("session_key") String sessionKey);
Класс URL
public class Url {
public static final String base_url = "http://www.medpal.net/api/v1/";
public static final String serviceUrl = "http://www.medpal.net/api/v1/services?";
public static Retrofit retrofit;
public static Retrofit getInstance() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(base_url)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
Окончательный ответ от сервера:
{
"response": {
"error": [],
"code": 200,
"message": "Service booked",
"secondary_message": "Service booked successfully",
"data": {
"book_service_id": 35
}
}
}