我想打一个改装电话,我得到了马尔福梅杰松例外。
这是我的电话:
String idFoto = "1ead0a1f-bbc4-46bd-901c-7988c0e6c68b";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Global.URL_BASE)
.addConverterFactory(GsonConverterFactory.create())
.build();
FotosAPI service = retrofit.create(FotosAPI.class);
Call<String> obtenerFotoCall = service.getFoto(Global.getToken(), idFoto);
这是我的界面:
public interface FotosAPI {
@GET(Global.URL_FOTO + "{id}")
Call<String> getFoto(@Header("Authorization") String token, @Path("id") String id);
}
调用队列进入onFailure方法,错误为"com.google.gson.stream.MalformedJsonExc0019:使用JsonReader.setLenient(true)在第1行第2列path$接受格式错误的JSON"。
我做了如下更改,以设置宽松:
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Global.URL_BASE)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
然后,我有一个不同的错误:“com.google.gson.stream.MalformedJsonException:第1行第1列路径$处的预期值”
我认为错误可能是在idFoto字符串值的Gson转换中,但我不知道是什么错误。
谁能帮帮我吗?
谢谢你们!
就像MD说的(非常感谢你,伙计!),解决方案是将GsonConverter更改为ToStringCorverterFactory。
这是我使用的类:
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;
public class ToStringConverterFactory extends Converter.Factory {
private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain");
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
if (String.class.equals(type)) {
return new Converter<ResponseBody, String>() {
@Override
public String convert(ResponseBody value) throws IOException {
return value.string();
}
};
}
return null;
}
@Override
public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations,
Annotation[] methodAnnotations, Retrofit retrofit) {
if (String.class.equals(type)) {
return new Converter<String, RequestBody>() {
@Override
public RequestBody convert(String value) throws IOException {
return RequestBody.create(MEDIA_TYPE, value);
}
};
}
return null;
}
}
然后你只需要将改装生成器更改为:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Global.URL_BASE)
.addConverterFactory(new ToStringConverterFactory())
.build();
请检查您从服务器获得的JSON,在我的情况下,我从服务器获得的JSON是无效的。
尝试从邮递员或其他工具检查您的JSON。
在主要活动中 我得到java.lang.IllegalStateException:应该是BEGIN_OBJECT,但在第1行第2列路径$处是BEGIN_ARRAY。 我尝试更改为,但得到java.lang.IllegalStateException:应为字符串,但在第19行第17列路径$[0].Company处为BEGIN_OBJECT
我想使用此服务:http://fast-gorge.herokuapp.com/contacts我设置Retrofit解析如下: 其中,我的日期格式为: 然而,当我运行该应用程序时,我进入了failure(reformerror error)方法,并显示消息:reformation。改装错误:com。谷歌。格森。JsonSyntaxException:2014-07-31T07:49:23.000
但是,如果web服务器没有回复任何东西(成功登录),那么通过改型,我会得到一个异常,因为是空的,web服务器回复的是一个简单的空字符串消息,而不是字符串数组。如果我将更改为,它就可以工作,但我不能,因为如果登录失败,它必须是一个字符串数组。
我试图在Reformation/gson中解析下面的json响应,特别是这个json 我尝试使用Map 但我总是得到回应。正文()为空。我是否需要创建实现JsonDeserializer的自定义json去序列化器并传递给gson生成器?
我不熟悉GSON和改装,这是我的输出模型(仅供参考结构), 这是我的输出 这是我的改装代码 应为BEGIN_对象,但为BEGIN_数组“ 我尝试过用List替换RootObject
我有以下类层次结构 改装日志: 但是当我在请求参数中发布事件实例时,只有抽象类被序列化。 改型Java接口: 我还注意到,在第二种情况下,字段序列化名称是,但它应该是!这使我认为改型对使用的与对参数使用的不同... 分级依赖关系 REST客户端