我是新来的 retrofit
(我用的是 volley
在此之前,我在改装方面做得很好,直到出现以下错误:-
com.google.gson.jsonsyntaxexception:java.lang.illegalstateexception:应为int,但在第8行第37列路径$.response.data.book\服务\ 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;
}
}
API端点
@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
}
}
}
1条答案
按热度按时间j8ag8udp1#
要准确地检测问题,您需要使用拦截器来记录服务器响应,要记录服务器响应,您可以使用okhttp3,这里就是一个例子。
并将此添加到您的reformation.builder
这些是给grad尔的
如果你这样做,你会看到你的一切发送和从服务器在你的日志猫。