当前位置: 首页 > 知识库问答 >
问题:

为什么我得到JsonSyntaxException错误

邴姚石
2023-03-14
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;
    }
}
@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个答案

李文轩
2023-03-14

为了准确地检测问题,您需要使用拦截器来记录服务器响应,要记录服务器响应,您可以使用OkHttp3(这里是一个例子)。

 private OkHttpClient provideOkhttpClient() {
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.readTimeout(15000, TimeUnit.MILLISECONDS);
        client.writeTimeout(70000, TimeUnit.MILLISECONDS);
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        client.addInterceptor(interceptor);
        return client.build();
    }

并将其添加到您的retrofit.builder中

.client(provideOkhttpClient())

这些是给Gradle的

implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0'
 类似资料:
  • 我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件

  • 我刚刚开始了一个新的项目,正在尝试连接到FireBase。当我试图构建我的项目时,我得到了一个错误:无法解析Android应用程序模块的Gradle配置,所以我查看了构建,它告诉我jCenter()不推荐使用,我应该删除它。当我把它取下来的时候,一切都很好。但是,当我尝试连接到Firebase时,我得到了错误:AbstractDynamicObject$CustomMessageMissingMe

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • {“error”:“invalid_scope”,“error_description”:“AADSTS70011:为输入参数”scope“提供的值无效。作用域 https://graph.microsoft.com/User.Read https://graph.microsoft.com/User.ReadWrite https://graph.microsoft.com/User.ReadB

  • 我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。