为什么在android中的json解析中返回null值?

时间:2012-07-02 12:04:21

标签: android json gson

这是我的Json:

{

    "feed": [
        {
            "id": "124124124124",
            "source": "aaaaaa",
            "comment_count": 0,
            "link": "bbbbb",
            "created_time": "2012-05-30T15:57:05+0000",
            "message": "ccccc",
            "type": "dddd",
            "thumbnail": "eeeee"
        },
        {
            "id": "35464423423412414",
            "source": "qweqddq",
            "comment_count": 0,
            "link": "adadasdwe",
            "created_time": "2012-05-30T15:52:21+0000",
            "message": "dadsadad",
            "type": "sfdcsdv",
            "thumbnail": "csdgfsd"
        },
        {

    "name": "asdadqwff",
    "id": "73182372381",
    "source": "lajhdkbad",
    "comment_count": 0,
    "link": "adjkbxczckbj",
    "created_time": "2012-05-30T15:40:28+0000",
    "message": "awjasdjands",
    "type": "lalkdm",
    "thumbnail": "akmldsncj"

     }

    ]

  }

这些是我在解析时使用的java类:

public class Feed {

    @SerializedName("feed")
    ArrayList<FeedResult> feed;

    public ArrayList<FeedResult> getFeed() {
        return feed;
    }

    public void setFeed(ArrayList<FeedResult> feed) {
        this.feed = feed;
    }   

}


public class FeedResult {

    @SerializedName("id")
    String id;

    @SerializedName("created_time")
    String created_time;

    @SerializedName("message")
    String message;

    @SerializedName("thumbnail")
    String thumbnail;

    @SerializedName("comment_count")
    String comment_count;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCreated_time() {
        return created_time;
    }

    public void setCreated_time(String created_time) {
        this.created_time = created_time;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getThumbnail() {
        return thumbnail;
    }

    public void setThumbnail(String thumbnail) {
        this.thumbnail = thumbnail;
    }

    public String getComment_count() {
        return comment_count;
    }

    public void setComment_count(String comment_count) {
        this.comment_count = comment_count;
    }


}

这是主要类的内部:

InputStream source = retrieveStream(url);

            Gson gson=new Gson();

            Reader reader = new InputStreamReader(source);

            Feed feeds=gson.fromJson(reader,Feed.class);

            ArrayList<FeedResult>feed=new ArrayList<FeedResult>();

            feed=feeds.getFeed();

            Toast.makeText(this,"feed --> ?? "+ feed, Toast.LENGTH_LONG).show();

feeds.getFeed()返回null。这是为什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

而不是直接将输入流提供给GSON构造函数,首先从URL下载JSON字符串,然后将其传递给构造函数进行解析,如下所示:

String source = read(url);
Feed feeds=new Gson().fromJson(source ,Feed.class);
ArrayList<FeedResult>feed=new ArrayList<FeedResult>();
feed=feeds.getFeed();
for(FeedResult feedResult:feedResults)
    System.out.println(feedResult);

读取功能:

public static String read(String url){

    System.out.println("Connecting to service URL : "+url);
    InputStream is = null;
    String result = "";
    // http post
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

    } catch (Exception e) {
        e.printStackTrace();
    }

    // convert response to string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();

    } catch (Exception e) {
        e.printStackTrace();
    }


    return result;
}

在FeedResult类中添加toString()函数,以便以可读的方式将其打印到控制台:

/* (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
    return "FeedResult [id=" + id + ", created_time=" + created_time
            + ", message=" + message + ", thumbnail=" + thumbnail
            + ", comment_count=" + comment_count + "]";
}