【问题标题】:Parsing complex JSON in Android在 Android 中解析复杂的 JSON
【发布时间】:2013-02-11 14:59:04
【问题描述】:

伙计们,我正在尝试解析下面的这个 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",
                           .
                           .
                           .
                           .
                           .

我只对 headlineurl 值感兴趣。我很容易通过下面的这个 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 活动(实际上我正在另一个班级)。那么如何实现这一点,如何存储对应的url和标题?请有人帮助我..

提前谢谢..

【问题讨论】:

    标签: java android json android-listview android-arrayadapter


    【解决方案1】:

    您可以创建一个名为 Article 的类,该类具有两个属性(字符串标题和字符串 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"));
    

    并将对象添加到数组列表中,例如..

    articleList.add(article);
    

    毕竟,当单击任何列表项时,要将 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 放入主要活动中的意图并将其接收到 webActivity 并最终在 webView 中使用它...

    【讨论】:

    • 嘿,非常好的解释,非常感谢。但是在标题的arrayAdapter中仍然有问题(但是webView部分工作正常)
    • ArrayAdapter 问题可以通过两种方式解决。首先,只需在代码中使用另一个类型为 string 的 arrayList say(strings),然后从 articleList 中提取所有标题并放入您的字符串中。 . for(int i=0;i
    【解决方案2】:

    创建一个自定义适配器,它存储 URL、标题作为模型并在 onView 中显示标题文本,并在列表视图的 onitemclicklistener 中访问适配器内的模型 obj 并使用该 URL 打开 webview ......就像这样http://www.ezzylearning.com/tutorial.aspx?tid=1763429

    和 itemclick 监听器

    listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
    
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
      Model item = (Model)contests_listView.getItemAtPosition(position);  
      Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.getUrl()));
      startActivity(browserIntent);  // show url in browser  or pass it to your webview activity
    
         }
     });
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2021-09-09
      • 2020-12-21
      • 1970-01-01
      相关资源
      最近更新 更多