使用 GSON 抛出 IllegalArgumentException 的简单 JSON 解析

Simple JSON parsing using GSON throwing IllegalArgumentException

我要的是这个:

1) 向 Wordpress 站点发送 GET 请求

2) 从站点获取 json 响应

3) 从该响应(我不知道它包含哪些元素或如何包含,但我确定它至少包含一个我感兴趣的元素。即 "content")获得 [= 的一个元素25=] 然后扔掉剩下的。

我真的无法正常工作。我已经发布了我理解的实现此功能所需的简单代码,但我得到了 IllegalArgumentException。显然我误解了图书馆里的东西

        URL hotelPresentationURL = new URL(
                "http://rodosseavillas.gr/wp-json/posts/206");
        HttpURLConnection conn = (HttpURLConnection) hotelPresentationURL
                .openConnection();
        conn.connect();
        InputStream reader = conn.getInputStream();// optimize

        JsonReader jsonReader = new JsonReader(
                new InputStreamReader(reader));
        jsonReader.setLenient(true);
        jsonReader.beginObject();


        JsonObject response = new Gson().fromJson(jsonReader,
                JsonObject.class);

        JsonElement element = response.get("content");


        jsonReader.close();
        Log.d(GuideFragment.TAG, "JSON RECEIVED: " + element.toString());




05-29 17:29:15.868: E/AndroidRuntime(2636): java.lang.RuntimeException: An error occured while executing doInBackground()
05-29 17:29:15.868: E/AndroidRuntime(2636):     at android.os.AsyncTask.done(AsyncTask.java:300)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.lang.Thread.run(Thread.java:841)
05-29 17:29:15.868: E/AndroidRuntime(2636): Caused by: java.lang.IllegalArgumentException
05-29 17:29:15.868: E/AndroidRuntime(2636):     at com.google.gson.internal.bind.TypeAdapters.read(TypeAdapters.java:676)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at com.google.gson.internal.bind.TypeAdapters.read(TypeAdapters.java:642)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at com.google.gson.Gson.fromJson(Gson.java:810)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at com.hellobusiness.fragments.ContentFetcherGuide.doInBackground(GuideFragment.java:61)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at com.hellobusiness.fragments.ContentFetcherGuide.doInBackground(GuideFragment.java:1)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at android.os.AsyncTask.call(AsyncTask.java:288)
05-29 17:29:15.868: E/AndroidRuntime(2636):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-29 17:29:15.868: E/AndroidRuntime(2636):     ... 4 more

这里我认为是你的错误,你应该做的是而不是使用 JsonObject 你应该使用正确的 dto,就像这样......

package com.example.helppeople.dto;

public class Author {

    private Integer ID;
    private String username;
    private String name;
    private String firstName;
    private String lastName;
    private String nickname;
    private String slug;
    private String URL;
    private String avatar;
    private String description;
    private String registered;
    private Meta meta;
    public Author(Integer iD, String username, String name,
            String firstName, String lastName, String nickname,
            String slug, String uRL, String avatar, String description,
            String registered, Meta meta) {
        super();
        ID = iD;
        this.username = username;
        this.name = name;
        this.firstName = firstName;
        this.lastName = lastName;
        this.nickname = nickname;
        this.slug = slug;
        URL = uRL;
        this.avatar = avatar;
        this.description = description;
        this.registered = registered;
        this.meta = meta;
    }
    public Integer getID() {
        return ID;
    }
    public void setID(Integer iD) {
        ID = iD;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getSlug() {
        return slug;
    }
    public void setSlug(String slug) {
        this.slug = slug;
    }
    public String getURL() {
        return URL;
    }
    public void setURL(String uRL) {
        URL = uRL;
    }
    public String getAvatar() {
        return avatar;
    }
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getRegistered() {
        return registered;
    }
    public void setRegistered(String registered) {
        this.registered = registered;
    }
    public Meta getMeta() {
        return meta;
    }
    public void setMeta(Meta meta) {
        this.meta = meta;
    }
    @Override
    public String toString() {
        return "Author [ID=" + ID + ", username=" + username + ", name="
                + name + ", firstName=" + firstName + ", lastName="
                + lastName + ", nickname=" + nickname + ", slug=" + slug
                + ", URL=" + URL + ", avatar=" + avatar + ", description="
                + description + ", registered=" + registered + ", meta="
                + meta + "]";
        }


}


package com.example.helppeople.dto;

public class Meta {
 private Links links;

public Meta(Links links) {
    super();
    this.links = links;
}

public Links getLinks() {
    return links;
}

public void setLinks(Links links) {
    this.links = links;
}

@Override
public String toString() {
    return "Meta [links=" + links + "]";
    }

}

package com.example.helppeople.dto;

public class Links {
private String self;
private String archives;



public Links(String self, String archives) {
    super();
    this.self = self;
    this.archives = archives;
}

public String getSelf() {
    return self;
}

public void setSelf(String self) {
    this.self = self;
}

public String getArchives() {
    return archives;
}

public void setArchives(String archives) {
    this.archives = archives;
}

@Override
public String toString() {
    return "Links [self=" + self + ", archives=" + archives + "]";
}



}

您可以使用以下站点生成 dto 结构 pojo, this is a very simple examples of how you should be using GSON example 1, example 2, example 3