简体   繁体   English

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

[英]Why null value returns in json parsing in android?

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: 这些是我在解析中使用的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;
    }


}

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. feeds.getFeed()返回null。 Why is that? 这是为什么? thanks for your help already. 感谢您的帮助。

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: 与其直接将输入流提供给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);

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: 在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 + "]";
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM