public interface UserService {
@POST(Constants.Api.URL_REGISTRATION)
@FormUrlEncoded
BaseWrapper registerUser(@Field("first_name") String firstname, @Field("last_name") String lastname, @Field("regNumber") String phone, @Field("regRole") int role);
public BaseWrapper registerUser(User user) {
return getUserService().registerUser(user.getFirstName(), user.getLastName(), user.getPhone(), user.getRole());
}
此创建例外
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
非常感谢你的帮助。
7条答案
按热度按时间wwwo4jvm1#
让我们看看您收到的错误。
必须是开始_OBJECT
JSON是一个对象,所有JSON对象都用大括号({})括起来。因此开始_OBJECT是{。它在某个地方期待它。
但为字符串
但他找到了一串“什么东西”。还是没告诉我们在哪。
在第1行第1列路径$
啊,太好了。在第1行第1列。这是JSON的开始。所以你忘记了用{}括起整个内容(或者至少你忘记了第一个,但我敢打赌你忘记了两个)。
ou6hu8tu2#
最近我也遇到过类似的问题,只有通过添加**“接受:application/json”**插入到标题部分。因此,如果您使用的是retrofit 2.0;
**第一个解决方案:**对于post方法,添加如下所示的头参数;
**第二个解决方案:**将header添加到拦截器类中,如下所示;
NB:代码以Kotlin为单位
希望它有帮助,快乐编码:)
hs1ihplo3#
清理和重建项目对我很有效。
yftpprvb4#
如果你想在json对象中添加ArrayList并在GSON中解析,那么确保ArrayList应该如下所示。
而不是
和解析。
ukdjmx9f5#
如果您的应用使用的是以前版本的存储数据,而您更改了数据类型,则可能会遇到此错误。
例如:在我的前一个版本中,我将一些内容存储为字符串。后来我将存储数据的类更新为对象类型。当我运行它时,我得到了这个错误。在清除应用程序数据或重新安装它后,错误清除。
清除应用程序数据可能是一个简单的解决办法。
xv8emn3q6#
解决方案
在Kotlin中,我们可以使用ResponseBody的Response并在其中管理初始响应。
响应-改装
响应正文- okHttp
响应是实际模型响应,例如UserResponse
这里,getAPIData()是API调用,返回响应主体的响应
apiResponseData是可变实时数据
使用它可以避免响应中的JSON类型转换错误。
6pp0gazn7#
这是一个proguard问题。在minifyEnabled true版本中破坏了API模型。您需要在ResponseModel和RequestModel API中添加可序列化
https://i.stack.imgur.com/uHN22.png