2011-02-10 75 views
3

我正在构建一个狩猎应用程序,我需要从this站点获取RSS源形式的天气信息。解析RSS提要到android应用程序

我已使用this网站的代码,并列出了提要,但是当我点击一个项目时,它没有将其连接到网站以获取更多信息。我想获得温度和风的信息,但我不知道如何去做,因为我是编程的开始。

我非常感谢任何帮助,特别是在可以解决我的问题的代码形式。

+0

可能重复的[如何使用SAX解析器解析XML](http://stackoverflow.com/questions/4827344/how-to-parse-xml-using-the-sax-parser) – 2011-02-10 17:30:44

回答

-1

您可以前往任何受欢迎的天气网站,例如Weather.com,并查找其API部分。大多数网站都提供其API用于开发应用程序。 Weather.com的API部分实际上会指导您完成实施过程。

4

以下是代码从URL中获取RSS源并将其列在android的listview中。

您需要先创建一个扩展ListActivity类,然后把这个代码:

// Initializing instance variables 
    headlines = new ArrayList(); 
    links = new ArrayList(); 

    try { 
     URL url = new URL("http://www.RSS-Feed-URL-HERE"); 

     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(false); 
     XmlPullParser xpp = factory.newPullParser(); 

      // We will get the XML from an input stream 
     xpp.setInput(getInputStream(url), "UTF_8"); 

      /* We will parse the XML content looking for the "<title>" tag which appears inside the "<item>" tag. 
      * However, we should take in consideration that the rss feed name also is enclosed in a "<title>" tag. 
      * As we know, every feed begins with these lines: "<channel><title>Feed_Name</title>...." 
      * so we should skip the "<title>" tag which is a child of "<channel>" tag, 
      * and take in consideration only "<title>" tag which is a child of "<item>" 
      * 
      * In order to achieve this, we will make use of a boolean variable. 
      */ 
     boolean insideItem = false; 

      // Returns the type of current event: START_TAG, END_TAG, etc.. 
     int eventType = xpp.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 

       if (xpp.getName().equalsIgnoreCase("item")) { 
        insideItem = true; 
       } else if (xpp.getName().equalsIgnoreCase("title")) { 
        if (insideItem) 
         headlines.add(xpp.nextText()); //extract the headline 
       } else if (xpp.getName().equalsIgnoreCase("link")) { 
        if (insideItem) 
         links.add(xpp.nextText()); //extract the link of article 
       } 
      }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){ 
       insideItem=false; 
      } 

      eventType = xpp.next(); //move to next element 
     } 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // Binding data 
    ArrayAdapter adapter = new ArrayAdapter(this, 
      android.R.layout.simple_list_item_1, headlines); 

    setListAdapter(adapter); 


} 
public InputStream getInputStream(URL url) { 
     try { 
      return url.openConnection().getInputStream(); 
     } catch (IOException e) { 
      return null; 
     } 
    } 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    Uri uri = Uri.parse((String) links.get(position)); 
    Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
    startActivity(intent); 
} 
1

您可以下载并检查我的项目上google play。这个项目是关于一些土耳其体育频道。它就像所有在一个应用程序。

您可以在github上查看项目源代码。