首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android嵌套数组

Android嵌套数组
EN

Stack Overflow用户
提问于 2015-06-10 19:00:44
回答 2查看 119关注 0票数 1

我试图在这类问题中模仿所选的答案,但我不知道为什么我无法检索其中的“附件”的URL。

我想要的是一种获取每个"post“然后抓取每个”附件“图像URL以保存为字符串的方法。我试过在我的仿真器上这样做,但它只是停留和永远运行。由于某些原因,我无法使用我的真正手机作为调试器,否则,我会张贴一个逻辑猫。

有一件事我确信,所有的东西,除去附件,都是正确的。我已经设法让文章下载,但不能得到嵌套的任何东西。我是JSON的新手,所以任何帮助都是非常感谢的。

我的异步:

代码语言:javascript
复制
 // you can make this class as another java file so it will be separated from your main activity.
        // https://www.codeofaninja.com/2013/11/android-json-parsing-tutorial.html
        public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

            private ArrayList<RssFeedItem> tempArray = new ArrayList<RssFeedItem>();
            final String TAG = "AsyncTaskParseJson";
            private ProgressDialog progress;

            // set your json string url here
            String yourJsonStringUrl = "http://www.prindlepost.org/?json=tag_slug=java";

            // contacts JSONArray
            JSONArray dataJsonArr = null;
            JSONArray imageURLArr = null;

            @Override
            protected void onPreExecute() {
                progress = new ProgressDialog(getActivity());
                progress.setTitle("Downloading Prindle's Posts");
                progress.setMessage("This should just take a moment.");
                progress.show();
            }

            @Override
            protected String doInBackground(String... arg0)
            {
                try
                {
                    // instantiate our json parser
                    JsonParser jParser = new JsonParser();

                    // get json string from url
                    JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

                    // get the array of users
                    dataJsonArr = json.getJSONArray("posts");

                    // loop through all users
                    for (int i = 0; i < dataJsonArr.length(); i++)
                    {
                        JSONObject c = dataJsonArr.getJSONObject(i);
                        // Storing each json item in variable
                        String id = c.getString("id");
                        String type = c.getString("type");
                        String slug = c.getString("slug");
                        String title = c.getString("title");
                        String content = c.getString("content");
                        String author = c.getString("author");

                        //http://stackoverflow.com/questions/19748829/android-get-json-array-nested-in-array
                        JSONObject attachments = c.getJSONObject("attachments");

                        Log.d("attachment",""+attachments.getString("url"));


                        // show the values in our logcat
                        Log.e(TAG, "id: " + id
                                + ", type: " + type
                                + ", slug: " + slug
                                + ", title: " + title
                                + ", author: " + author
                                + ", content: " + content + "\n\n");

                        tempArray.add(new RssFeedItem(title, content, "", 0, new Date(), author));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return null;
            }

JSON:http://www.prindlepost.org/?json=tag_slug=java

代码语言:javascript
复制
{
status: "ok",
count: 10,
count_total: 334,
pages: 34,
posts: [
{
id: 4230,
type: "post",
slug: "crowdsourcing-justice",
url: "http://www.prindlepost.org/2015/06/crowdsourcing-justice/",
status: "publish",
title: "Crowdsourcing Justice",
title_plain: "Crowdsourcing Justice",
content: "<p>The video begins abruptly. Likely recorded on a phone, the footage is shaky and blurry, yet the subject is sickeningly unmistakeable: a crying infant being repeatedly and violently dunked into a bucket of water. First it is held by the arms, then upside down by one leg, then grasped by the face as an unidentified woman pulls it through the water. Near the end of the video, the infant falls silent, the only remaining audio the splashing of water and murmured conversation as the child is dunked again and again.</p> <div class="more-link-wrap wpb_button"> <a href="http://www.prindlepost.org/2015/06/crowdsourcing-justice/" class="more-link">Read more</a></div> ",
excerpt: "<p>Facebook&#8217;s decision not to censor a video of child abuse poses questions of censorship, activism and online justice. </p> ",
date: "2015-06-09 14:00:19",
modified: "2015-06-10 09:53:36",
categories: [
{
id: 433,
slug: "crime-and-law",
title: "Crime and Law",
description: "",
parent: 63,
post_count: 14
},
{
id: 38,
slug: "ethics-news",
title: "Ethics News",
description: "",
parent: 0,
post_count: 153
},
{
id: 63,
slug: "society-ethics-news",
title: "Society",
description: "",
parent: 38,
post_count: 187
}
],
tags: [
{
id: 180,
slug: "abuse",
title: "abuse",
description: "",
post_count: 2
},
{
id: 481,
slug: "child-abuse",
title: "child abuse",
description: "",
post_count: 1
},
{
id: 482,
slug: "doxxing",
title: "doxxing",
description: "",
post_count: 1
},
{
id: 57,
slug: "facebook",
title: "Facebook",
description: "",
post_count: 4
},
{
id: 470,
slug: "internet",
title: "internet",
description: "",
post_count: 2
},
{
id: 130,
slug: "justice",
title: "justice",
description: "",
post_count: 2
},
{
id: 59,
slug: "social-media",
title: "social media",
description: "",
post_count: 4
}
],
author: {
id: 43,
slug: "connergordon_2016",
name: "Conner Gordon",
first_name: "Conner",
last_name: "Gordon",
nickname: "connergordon_2016",
url: "http://connergordon.tumblr.com",
description: "Conner is a web and social media intern at the Prindle Institute. A Political Science and English double major from Carmel, Indiana, Conner's ethical interests lie in memory studies, conflict analysis and the ethics of representation. He also has interests in literature, art and photography."
},
comments: [ ],
attachments: [
{
id: 4233,
url: "http://www.prindlepost.org/wp-content/uploads/2015/06/Screen-Shot-2015-06-09-at-11.48.59-AM.png",
slug: "screen-shot-2015-06-09-at-11-48-59-am",
title: "",
description: "",
caption: "Image credit: Screenshot from Youtube",
parent: 4230,
mime_type: "image/png",
images: [ ]
},
{
id: 4235,
url: "http://www.prindlepost.org/wp-content/uploads/2015/06/Screen-Shot-2015-06-09-at-11.48.59-AM1.png",
slug: "screen-shot-2015-06-09-at-11-48-59-am-2",
title: "",
description: "",
caption: "<a href="https://www.youtube.com/watch?v=UOCB8j6QgeI&bpctr=1433876092">Image/Youtube</a>",
parent: 4230,
mime_type: "image/png",
images: [ ]
}
],
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 19:12:04

我也有同样的问题。几天后,我的大脑融化了,我试着用谷歌的GSON。它为您完成所有的解析和思考,并返回一个包含来自JSON的所有信息的不错的小对象。

下面是项目链接:https://github.com/google/gson

要使用它,必须实例化一个新的Gson解析器,如下所示

代码语言:javascript
复制
Gson gson = new Gson();
YourObject object = gson.fromJson(jsonString, YourObject.class);

YourObject类应该如下所示:

代码语言:javascript
复制
public class YourObject{
    int status;
    int count;
    String count_total;
    ...
    Post[] posts;
}

现在,使用JSON中预测的字段创建一个Post类:

代码语言:javascript
复制
public class Post{
    int id;
    String type;
    String slug;
    ...
    Category[] categories;
}

我认为您可以了解如何设置POJO。

只是一个提示:如果任何Json元素都有null或空值,即使它们主要是YourObject类中的int,最好将它们声明为String以避免java.lang.NumberFormatException

票数 2
EN

Stack Overflow用户

发布于 2015-06-10 19:08:21

可以使用getJSONArray()方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30765056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档