Android &引用;没有适用于简单类型的构造函数“;安卓系统中的杰克逊和其他系统中的对象
我在我的项目中使用Jackson来解析从服务器接收到的JSON,解析步骤非常有效,当尝试使用嵌套对象时,问题就出现了。下面是一些代码:Android &引用;没有适用于简单类型的构造函数“;安卓系统中的杰克逊和其他系统中的对象,android,json,parsing,constructor,jackson,Android,Json,Parsing,Constructor,Jackson,我在我的项目中使用Jackson来解析从服务器接收到的JSON,解析步骤非常有效,当尝试使用嵌套对象时,问题就出现了。下面是一些代码: @JsonIgnoreProperties(ignoreUnknown = true) public class Song { @JsonProperty("id") private int id = 0; @JsonProperty("title") private String title = ""; @JsonPr
@JsonIgnoreProperties(ignoreUnknown = true)
public class Song {
@JsonProperty("id")
private int id = 0;
@JsonProperty("title")
private String title = "";
@JsonProperty("link")
private String link = "";
@JsonProperty("album")
private Album album;
public Song() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link ;
}
public void setLink(String link ) {
this.link = link ;
}
public Album getAlbum() {
return album;
}
public void setAlbum(Album album) {
this.album = album;
}
}
Album类如下所示:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Album {
@JsonProperty("id")
private int id;
@JsonProperty("title")
private String title;
@JsonProperty("artist")
private Artist artist;
public Album(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title){
this.title = title;
}
public Artist getArtist() {
return artist;
}
public void setArtist(Artist artist) {
this.artist = artist;
}
}
最后是“艺术家”课程:
因此,正如我在JSON解析工作正常之前所说的,问题是当我尝试访问其中一个“sub”对象时,例如,如果我尝试获取艺术家名称。当我这样做时:
getSong().getAlbum().getArtist().getName();
无论我在哪里做,Jackson都会停止解析JSON:
(IOException)Error: No suitable constructor found for type [simple type, class com.zarpamos.fandanztap.model.Album]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
纯JSON输出:
{"categories":[{"id":"1","name":"Pop","packs":[{"id":"2","songs":[{"album":{"id":"2","title":"Sex And Love","artist":{"id":"2","name":"Enrique Iglesias"}},"id":"3","title":"Bailando","link":"song_1.mp3"},{"album":{"id":"1","title":"Peace Is The Mission","artist":{"id":"3","name":"Major Lazer"}},"id":"6","title":"Powerful","link":"song_2.mp3"},{"album":{"id":"2","title":"Sex And Love","artist":{"id":"2","name":"Enrique Iglesias"}},"id":"4","title":"Loco","link":"song_3.mp3"}, // More JSON elements...
解析“类别”和“包”效果很好,问题出在“相册”中
相同的JSON输出,但样式化:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[name] => Pop
[packs] => Array
(
[0] => Array
(
[id] => 2
[songs] => Array // Here starts the songs JSON array, where the error is produced
(
[0] => Array // song
(
[album] => Array // album
(
[id] => 2
[title] => Sex And Love
[artist] => Array // artist
(
[id] => 2
[name] => Enrique Iglesias
)
)
[id] => 3
[title] => Bailando
[link] => song_1.mp3
)
[1] => Array
(
[album] => Array
(
[id] => 1
[title] => Peace Is The Mission
[artist] => Array
(
[id] => 3
[name] => Major Lazer
)
)
[id] => 6
[title] => Powerful
[link] => song_2.mp3
)
[2] => Array
(
[album] => Array
(
[id] => 2
[title] => Sex And Love
[artist] => Array
(
[id] => 2
[name] => Enrique Iglesias
)
)
[id] => 4
[title] => Loco
[link] => song_3.mp3
)
// More array elements...
以下是堆栈跟踪:
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1080)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:142)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
W/System.err﹕ at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
W/System.err﹕ at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
W/System.err﹕ at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2578)
W/System.err﹕ at com.dolphinziyo.myapp.tasks.GetPacksTask.onPostExecute(GetPacksTask.java:93)
W/System.err﹕ at com.dolphinziyo.myapp.tasks.GetPacksTask.onPostExecute(GetPacksTask.java:38)
W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:631)
W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:107)
W/System.err﹕ at android.os.Looper.loop(Looper.java:194)
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5371)
W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
这真的很奇怪,我不知道我做错了什么。谁能告诉我错误在哪里
提前感谢您在您的
专辑
课程中,您必须为艺术家
属性设置一个setter,如下所示:
public void setArtist(Artist artist) {
this.artist = artist;
}
public void setArtist(**Artista** artist) {
this.artist = artist;
}
不是这样的:
public void setArtist(Artist artist) {
this.artist = artist;
}
public void setArtist(**Artista** artist) {
this.artist = artist;
}
我最终手动解析了它,直到我有更多的时间来测试它 您的类是顶级类型还是嵌套在另一个类中?如果它们是嵌套的,则需要将它们标记为“static”这是将代码转换为StackOverflow时的拼写错误,我用西班牙语编写了代码。我已经修复了我的帖子,谢谢这不是JSON输出,看起来更像PHP对象?奇怪的是,在访问对象时会出现错误,可以发布stacktrace吗?这是打印的JSON输出(来自PHP),为了更具可读性,我决定显示它,而不是普通的JSON。我想看看是否可以打印StackTrace我用同样的JSON代码更新了我的文章,但现在是纯文本。我刚刚添加了堆栈Trace,正如我在代码中所示,“艺术家”嵌套在“相册”中,“相册”嵌套在“歌曲”中,我将尝试静态执行它们,谢谢。对不起,它们是顶级的(如提供的代码中所示)没有嵌套。不管怎样,我尝试了静态操作,但应用程序失败,出现空指针异常。