java - 在 Android 中解析复杂的 JSON

标签 java android json android-listview android-arrayadapter

伙计们,我正在尝试解析下面的 JSON

{"response": 
{"message": "Success", 
"code": 2002, 
"payload": 
    {"article": [
                    {"timestamp_epoch": 1359967680, 
                    "search_score": 10.0, 
                    "headline": "When Sachin felt like bunking cricket practice", 
                    "timestamp": "2013-02-04 08:48:00", 
                    "related_article_count": 0, 
                    "excerpt": "...their campaign 'Support my School' by NDTV in Mumbai on Sunday. Sachin Tendulkar and Aishwarya Rai Bacchan during an event 3/5 Sachin Tendulkar and Aishwarya Rai Bacchan during an event India's Sachin Tendulkar with actress Aishwarya Rai Bachchan during the...", 
                    "source": {"name": "OneIndia", 
                                "url": "http://www.oneindia.in/", 
                                "daylife_url": "http://www.daylife.com/source/OneIndia", 
                                "rank": 3, 
                                "favicon_url": "http://favicon.daylife.com/imageserve/0e0Jd1Xczb7oW/favicon.png", 
                                "source_id": "0e0Jd1Xczb7oW", 
                                "type": "MAINSTREAM"}, 
                    "url": "http://feedproxy.google.com/~r/oneindia-cricket/~3/z1pS6w289SU/when-sachintendulkar-felt-like-bunking-cricket-practice-066016.html", 
                    "daylife_url": "http://www.daylife.com/article/07nC5eTbBE0YA", 

                    "article_id": "07nC5eTbBE0YA"}, 


                    {"timestamp_epoch": 1360361400, 
                    "search_score": 8.69279902947, 
                    "headline": "Sachin equals Sunny",
                           .
                           .
                           .
                           .
                           .

我只对标题url 值感兴趣。我可以使用下面的 Java 代码轻松获取这些值。

JSONObject root = new JSONObject(result);
            JSONObject response = root.getJSONObject("response");

            String attributeId = response.getString("message");
            System.out.println(attributeId);

            JSONObject payload = response.getJSONObject("payload");
            JSONArray article = payload.getJSONArray("article");



            for (int i = 0; i < article.length(); i++) {
                JSONObject c = article.getJSONObject(i);
                String headline = c.getString("headline");
                String url = c.getString("url");
                System.out.println(url);
                System.out.println(headline);
                strings.add(c.getString("headline").toString());
            }
            arrayAdapter = new ArrayAdapter<String>(MainActivity.this,
                    android.R.layout.simple_list_item_1, strings);

            resultList.setAdapter(arrayAdapter);
            arrayAdapter.notifyDataSetChanged();

这里我在 ListView 中设置了 headline(这部分工作正常)。我的问题是:当我点击任何列表时,它应该将相应的url传递给WebView Activity (实际上我正在另一个中实现这个类(class))。那么如何实现这一点,如何存储与标题对应的url?请有人帮助我..

提前致谢..

最佳答案

您可以创建一个名为 Article 的类,该类具有两个属性(String heading 和 String url)。 然后为这两个属性生成 getter/setter。现在创建 Article 类型的 ArrayList 喜欢..

ArrayList<Article> articleList = new ArrayList<Article>();

然后在解析您的数据时按...

Article article = new article();

并将值放入对象中,例如...

article.setHeading(c.getString("headline"));
article.setUrl(c.getString("url"));

并将对象添加到 arraylist 中......

articleList.add(article);

毕竟当单击任何列表项时,要让它在您的主要 Activity 中添加 OnItemClickListener。 它会给你点击项目的位置。然后你可以从 arcleList 中获取相应对象的 url,比如..

articleList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long id) {
            String url = articleList.get(position).getUrl();
            Intent i = new Intent(MainActivity.this,   WebViewActivity.class);
            i.putExtra("url", url);
            startActivity(i);
        }
    });

现在将此 url 放入主要 Activity 的 Intent 中,并将其接收到 webActivity 最后在 webView 中使用它...

关于java - 在 Android 中解析复杂的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814684/

相关文章:

java - 使用 XMLPullParser 解析 XML 时出现异常

javascript - 获取 JSON 数组中前 5 个分数值

java @异步方法: not running async

java - 如何获取 Android 应用程序的提升权限

java - 在 Java 中尝试 Catch block

android - PackageManager#installPackage 不适用于 Android N

json - 当值未命名时将 json 值检索到列中

python - 预期关键数据类型不匹配 : S actual: L Dynamodb insert error with boto3

java - BIRT 报告 - 删除表元素。找不到 beforeFactory() 脚本

java - 断言失败——检查一个字段是否大于