我需要发送一个json到我的Web服务,json是:
{
"Sala": {
"usuario": "%@",
"adversario": "%@",
"atualizacao": "%@",
"device": "%@",
"device_tipo": "ios"
}
}
。我尝试使用Retrofit API 1.8执行此操作。当我尝试发送帖子时,会引发异常。
例外状况:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 7 path $
我在试这个
public class ChatObject {
private String usuario;
private String adversario;
private String atualizacao;
private String email;
private String device;
private String device_tipo;
改装接口
@POST("/WsChat/interacao.json")
public void onReceiveMessage(@Body ChatObject obj,
Callback<JsonElement> response);
机具
public void receiveMessage(){
///{\"Sala\":{\"usuario\":\"%@\",\"adversario\":\"%@\",\"atualizacao\":\"%@\",\"device\":\"%@\",\"device_tipo\":\"ios\"}}
ChatObject chatObject = new ChatObject(BatalhaConfigs.USUARIO_EMAIL,
BatalhaConfigs.ADVERSARIO_EMAIL,
new Date().toString(),
BatalhaConfigs.USUARIO_EMAIL,
AndroidReturnId.getAndroidId(),
"android");
RestAdapter adapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(new CustomRequestInterceptor())
.setEndpoint(END_POINT)
.build();
ChatListener listener = adapter.create(ChatListener.class);
listener.onReceiveMessage(chatObject, new Callback<JsonElement>() {
@Override
public void success(JsonElement jsonElement, retrofit.client.Response response) {
Log.i("JSON ELEMENT->", jsonElement.toString());
}
@Override
public void failure(RetrofitError error) {
Log.i("FALHOU->", error.getLocalizedMessage());
}
});
}
7条答案
按热度按时间kkih6yb81#
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true)
通常会在JSON中有一些错误的字符时抛出。异常消息本身建议使反序列化更具容忍性。但是我建议您修复JSON,去掉不需要的字符。
您应该扩充
GsonConverter
并覆写fromBody()
,让Gson
从相容的JsonReader
读取。然后只要将它设定为您的RestAdapter
即可。这会尝试使用相容的JsonReader
来还原序列化,然后关闭它(如果未掷回例外状况)。}
8ftvxx2r2#
似乎在Retrofit 2.0中略有变化
我是这样做的:
新广济厂:
响应的宽松解析:
请求的宽松创建:
我只是复制了Retrofit源代码,并在请求和响应转换器
jsonWriter.setLenient(true);
中添加了一行代码或者更容易:
gj3fmq9x3#
第一个
mum43rcc4#
我花了一天的时间才得到这个错误,并按照这个页面上的“正确答案”来做,但最终我解决了我的问题,那就是将数组“int”(我的模型类也是int)的响应赋值给textView,当然这需要我将其转换为int值的字符串。在我的例子中,我甚至根本不需要做@Nikola Despotoski的解决方案。
lyr7nygr5#
下面的代码对我有用
要使用“.setLenient()",需要将下面的行添加到应用的gradle文件中。
实现'com.google.code.gson:gson:2.7'
zzwlnbp86#
如果您使用PHP作为API,请检查它是否只回显JSON编码的对象,否则将抛出此类异常
cidc1ykv7#
你应该帮助这段代码:
放置jar文件: