在改造中改造设置宽松错误:1.8.0

时间:2016-10-17 09:22:13

标签: java android retrofit

我收到错误

  

retrofit.RetrofitError:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)接受第1行第7行路径中格式错误的JSON $

我尝试了MalformedJsonException with Retrofit API? 1的1个回答,我正在使用改版1.8,我该怎么办?

我的Java代码:

RetroHelper

public static RestAdapter getAdapter(Context ctx, String serverUrl) {
        mContext=ctx;
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(StringConstants.BASE_CLASSES_URL+serverUrl)
                .setLogLevel(RestAdapter.LogLevel.FULL).setLog(new RestAdapter.Log() {
                    @Override
                    public void log(String msg) {
                        Log.i("Retro Helper", msg);
                    }
                })
                .build();

JSON响应

{
    "status": "Success",
    "data": null,
    "message": "Successfully get the slot lists",
    "statusCode": 200
}

其他代码

public ServiceOperations getBaseClassService(Context ctx, String url) {
            return new RetroHelper().getAdapter(ctx, url).create(ServiceOperations.class);
        }



     @GET("/schduleLists")
        void getDoctorSchedule(@Query("doctorid") int id, Callback<JsonObject> callback);

 mUtil.getBaseClassService(getActivity(), "").getDoctorSchedule(mUserId,new Callback<JsonObject>() {
                @Override
                public void success(JsonObject jsonObject, Response response) {
                    if (jsonObject.get(StringConstants.STATUS).getAsString().equalsIgnoreCase("Success")) {// this if condition is casued error!
                        mUtil.dismissDialog();
                        JsonArray jsonArray =jsonObject.get("data").getAsJsonArray();

1 个答案:

答案 0 :(得分:0)

我怀疑result1在其末尾有一些字符,你无法在调试器中看到关闭}字符。结果1与结果2的长度是多少?我注意到你引用的result2有169个字符。

当对象结束后没有空格时,GSON会抛出那个特殊错误,并且它非常狭窄地定义空格(如JSON规范所做的那样) - 只有\ t,\ n ,\ r和空格计为空格。特别要注意,尾随NUL(\ 0)字符不算作空格,会导致此错误。

如果你不能轻易找出最后导致额外字符的原因并消除它们,另一个选择是告诉GSON以宽松模式解析:

Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);
Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);