我收到错误
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();
答案 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);