Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;没有适用于简单类型的构造函数“;安卓系统中的杰克逊和其他系统中的对象_Android_Json_Parsing_Constructor_Jackson - Fatal编程技术网

Android &引用;没有适用于简单类型的构造函数“;安卓系统中的杰克逊和其他系统中的对象

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

我在我的项目中使用Jackson来解析从服务器接收到的JSON,解析步骤非常有效,当尝试使用嵌套对象时,问题就出现了。下面是一些代码:

@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,正如我在代码中所示,“艺术家”嵌套在“相册”中,“相册”嵌套在“歌曲”中,我将尝试静态执行它们,谢谢。对不起,它们是顶级的(如提供的代码中所示)没有嵌套。不管怎样,我尝试了静态操作,但应用程序失败,出现空指针异常。