期望一个字符串,但在第1行第29列路径上是BEGIN_OBJECT

时间:2018-01-14 23:57:35

标签: java android json

我收到以下错误:

  

java.lang.IllegalStateException:期望一个字符串,但是   BEGIN_OBJECT在第1行第29栏路径$ .entree [0] .photo

对我来说没有意义,因为我的json响应应该按如下方式构建:

     buttonSave.setOnClickListener(){
     val recKey = "????" 

     var record = Record(recKey, textDescription.text, textAddress.text)

         mDatabase.setValue(record) 

         finish()
       }
    }

JSON数据:

import com.google.gson.annotations.SerializedName;

public class Entree {
    @SerializedName("id")
    public int id;
    @SerializedName("photo")
    public Entree.Photo photo;

    public class Photo {
        @SerializedName("url")
        public String url;
        @SerializedName("web")
        public Entree.Photo.Web web;
        @SerializedName("mobile")
        public Entree.Photo.Mobile mobile;

        public class Web {
            @SerializedName("url")
            public String url;
        }

        public class Mobile {
            @SerializedName("url")
            public String url;
        }
    }
}

你是否看到Photo是一个对象而不是我班上的字符串?那我做错了什么?

2 个答案:

答案 0 :(得分:2)

尝试使用 $scope.getDieStatus = function(){ $http({ method : "GET", url : "url", }).then(function success(response) { $scope.eventSource = [response.data]; $scope.ready = true; }, function error(response) { return response.statusText; }); }

标记内部类

Gson document中,它说

  

Gson也可以反序列化静态嵌套类。但是,Gson不能   因为它们没有args,所以自动反序列化纯内部类   构造函数还需要对包含Object的引用   在反序列化时不可用。你可以解决这个问题   通过使内部类静态或通过提供一个问题来解决问题   自定义InstanceCreator。

答案 1 :(得分:0)

实际上,你的

  

GSON Serializable类不正确,   对于像这样的JSON响应,

  {
    "entrees": [{
    "id": 32,
    "photo": {
        "url": "4c312e9aed37a59319096a03_1.jpg",
        "web": {
            "url": "web_4c312e9aed37a59319096a03_1.jpg"
        },
        "mobile": {
            "url": "mobile_4c312e9aed37a59319096a03_1.jpg"
        }
    }
}]
   }

GSON课程将为,

  public class Entree {
@com.google.gson.annotations.SerializedName("entrees")
public List<Entrees> Entrees;

public static class Web {
    @com.google.gson.annotations.SerializedName("url")
    public String Url;
}

public static class Mobile {
    @com.google.gson.annotations.SerializedName("url")
    public String Url;
}

public static class Photo {
    @com.google.gson.annotations.SerializedName("url")
    public String Url;
    @com.google.gson.annotations.SerializedName("web")
    public Web Web;
    @com.google.gson.annotations.SerializedName("mobile")
    public Mobile Mobile;
}

public static class Entrees {
    @com.google.gson.annotations.SerializedName("id")
    public int Id;
    @com.google.gson.annotations.SerializedName("photo")
    public Photo Photo;
}
}