Why null value returns in json parsing in android?

时光怂恿深爱的人放手 提交于 2019-12-13 05:46:29

问题


This is my 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"

     }

    ]

  }

These are my java classes to use in parsing:

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;
    }


}

This is the inside of main class:

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() returns null. Why is that? thanks for your help already.


回答1:


instead of giving inputstream directly to the GSON constructor, download the JSON string first from the URL and then pass it to the constructor for parsing as below:

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);

the read function:

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;
}

add toString() function in your FeedResult class, so that it will get printed to console in readable manner:

/* (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 + "]";
}


来源:https://stackoverflow.com/questions/11293331/why-null-value-returns-in-json-parsing-in-android

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!