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

JSON后的改型2.0.1--MalformedJsonException

萧宁
2023-03-14

我有麻烦做一个职位请求与翻新2。我试图使用Regetfit的GsonConverterFactory将POJO对象转换为JSON。

我得到了使用GsonConverterFactory将主体转换为POJO类的请求,但在一篇文章中,它似乎不起作用(POJO到JSON)。我在Android Studio中使用这个,并使用Gradle来构建我的项目。这些是我的年级依赖项:

compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.okhttp:okhttp:2.7.5'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'

下面是Api接口的代码:

public interface EhabrApi {
    @POST("/create-account")
    Call<ResponseBody> createUser(@Body User user);
}
    User newUser = new User("Bob", "Smith", "bob@gmail.com", "password", "Seattle", "1990-01-01");

    System.out.println("User is " + new Gson().toJson(newUser));

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    EhabrApi ehabrApi = retrofit.create(EhabrApi.class);
    Call<ResponseBody> call = ehabrApi.createUser(newUser);
    System.out.println("Request is " + new Gson().toJson(call.request()));

    call.enqueue(new Callback<ResponseBody>() {
           @Override
           public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
               int statusCode = response.code();
               System.out.println("Recieved " + statusCode);
           }

           @Override
           public void onFailure(Call<ResponseBody> call, Throwable t) {
               System.out.println("Failed call " + t);
               System.out.println("stack trace: ");
               t.printStackTrace();
           }
        }
    );
Creating new account
User is {"Birthday":"1990-01-01","City":"Seattle","Email":"bob@gmail.com","FirstName":"Bob","LastName":"Smith","Password":"password"}
Request is {"headers":{"namesAndValues":[]},"method":"POST","url":{"host":"mywebpage.com","password":"","pathSegments":["create-account"],"port":8080,"scheme":"http","url":"http://mywebpage.com","username":""}}
Failed call com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
stack trace: 
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1567)
    at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1416)
    at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:597)
    at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:201)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
    at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:116)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
    at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)

编辑:现在我已经按照建议放入了一个拦截器。在我看来,帖子请求是对的...在这里:

--> POST http://[mywebpageurl.com]/create-account http/1.1
Content-Type: application/json; charset=UTF-8
Content-Length: 125
{"Birthday":"1990-01-01","City":"Seattle","Email":"bob@gmail.com","FirstName":"Bob","LastName":"Smith","Password":"password"}
--> END POST (125-byte body)
<-- 200 OK http://[mywebpageurl.com]/create-account (100ms)

共有1个答案

裴永年
2023-03-14

在您的logcat消息中非常清楚

调用com.google.gson.stream.MalformedJSONException失败:使用jsonReader.setlenient(true)在第1行第1列路径$接受格式错误的JSON

因此,这意味着您等待JSONObject,但是由于您的请求,您得到了格式错误的JSONObject。要解决问题,请检查您的JSON响应。

 类似资料:
  • 我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?

  • 错误是: 方法引发了'java.lang.NullPointerException'异常。无法计算pl.netizens.eonbeacon.storage.eonbeaconmodel.ToString() Eeid,Eeid模型:

  • 我是新来改装的。我已经在大多数Web服务中使用了volley,决定继续改进。但是我被Json解析所困,我在POJO类中得到了空数据。我尝试通过检查响应,我的响应是正确的,当我在模型类中解析时,我得到的是空白数据。请指导我,任何帮助都将不胜感激。 注意:POJO类是可parcelable,还包含cunstructor和gette/setter。我从这里删除了它,因为文本限制。 JSON响应

  • 从"text/html"到"Application/json"的响应的标头类型。其他然后这个 am使用as头类型作为头(“内容类型”、“应用程序/json;字符集=UTF-8”) 但不是改变。

  • 我正在使用Reverfit 2.0从返回json文本的web服务读取数据,但在下面的代码中响应是LinkedTreeMap,我无法将其转换为json: 现在我从站点读取数据: 形成的url为json响应为