【问题标题】:Expected BEGIN_OBJECT but was STRING应为 BEGIN_OBJECT,但为 STRING
【发布时间】:2017-03-22 09:34:10
【问题描述】:

我已经检查了其他相关问题,但他们的建议都不适用于我的情况。我正在使用 Retrofit 2.2 和 GSON 来获得 Rest 响应: 这是响应的样子:

   {"idUser":0,"nom":"kaddour","prenom":"hanedi","login":"hanedi@gmail.com","password":null,"genre":"f","adresse":"ettahrir","codePostal":8050,"tel":20333473,"active":0,"panneaux":null,"lesalertes":null,"paysuser":null,"ville":null}

它是一种有效的 json 格式,但每当我使用此代码调用时,我都会收到 Expected Begin_Object 异常:

         apiService = RestService.createService(SolarAPIService.class);
    Call<User> call = apiService.authentif(email, pass);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, retrofit2.Response<User> response) {
            user=response.body();}

我找不到哪里出了问题。 任何帮助表示赞赏! 编辑这是我的用户类:

        public class User {
@SerializedName("idUser")
@Expose
private int idUser;
@SerializedName("nom")
@Expose
private String nom;
@SerializedName("prenom")
@Expose
private String prenom;
@SerializedName("login")
@Expose
private String login;
@SerializedName("password")
@Expose
private String password;
@SerializedName("genre")
@Expose
private String genre;
@SerializedName("adresse")
@Expose
private String adresse;
@SerializedName("codePostal")
@Expose
private int codePostal;
@SerializedName("tel")
@Expose
private int tel;
@SerializedName("active")
@Expose
private int active;
@SerializedName("panneaux")
@Expose
private List<PanneauV> panneaux;
@SerializedName("lesalertes")
@Expose
private List<Alerte> lesalertes;
@SerializedName("paysuser")
@Expose
private Pays paysuser;
@SerializedName("ville")
@Expose
private Ville ville;
     //Constructor with arguments and Constructor without arguments
     //getters and setters

【问题讨论】:

  • 请告诉我们您的用户等级
  • 我相信您提供的 JSON 完整:Gson 报告说{ 是一个对象开始,但响应有一个字符串。检查您的 real JSON 并确保 $.paysuser$.ville 都不是字符串。或者,也许,你的整个响应是一个字符串。
  • 这是我的电话 `Call authentif(@Path("login") String login,@Path("pwd")String pwd);` 它显然应该返回一个用户对象和@ 987654327@ 和 ville 是对象。可能是由 password 导致的,其中一个字符串返回为 null
  • @MeknessiHamida 不,null 始终是安全的,不会根据定义导致BEGIN_OBJECT 问题。您的 User 映射在三种情况下定义对象 ({):它本身、它的 paysuser 和它的 ville 属性。没有任何其他对象映射。请检查回复。要识别确切位置,请阅读异常消息:它必须包含失败的位置路径,如果我没记错的话,还必须包含行和列位置,因此您可以使用该坐标来识别“损坏”标记。
  • Expected BEGIN_OBJECT but was STRING at line 1 column 1 path 这是我的例外,所有返回的空值都是除密码之外的对象 Itried 服务器响应在 RestClient(firefox 插件)上,响应看起来完全有效。它不应该被读取为字符串

标签: json retrofit2 android gson


【解决方案1】:

您的 User 类必须实现 Serializable。

如果名称相同,则无需使用 SerializeName 覆盖您的属性。 我认为您也可以删除@expose。

【讨论】:

  • 基于 GSON 的使用,我的类不必实现 Serializable,即使我添加它,异常仍然存在
  • 您使用自定义 Gson 转换器吗?
  • 不,我没有使用自定义转换器
  • Serializable 与 Gson 完全无关。
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2015-11-06
  • 2016-06-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多