2011-02-10 16 views
3

私はthisサイトのRSSフィードの形で気象情報が必要なハンティングアプリケーションを構築しています。アンドロイドアプリケーションへのRSSフィードの解析

私はthisサイトのコードを使用していますが、フィードをリストしていますが、アイテムをクリックすると詳細情報のためにサイトに接続しません。私はテンポラリーと風の情報を得たいと思っていますが、私はプログラミングの初心者であるためにどのようにしたらいいのか分かりません。

私の問題を解決するコードの形で、特に助けていただければ幸いです。

+0

[SAXパーサーを使用してXMLを解析する方法](http://stackoverflow.com/questions/4827344/how-to-parse-xml-using-the-sax-parser) –

+1

なぜ可能性がありますか?これまでのコードを表示して、エラーがどこで発生したのかを指摘してください。 –

+1

私はこのコードを使用しました:http://www.warriorpoint.com/blog/downloads/ eclipseにエクスポートして、次の文字列を変更してページからRSSを取得しました:static String feedUrlString = "http:// www。// –

答えて

-1

天気予報のWebサイト(Weather.comなど)にアクセスして、APIセクションを探してください。ほとんどのウェブサイトでは、アプリを開発するためのAPIを提供しています。 Weather.comのAPIセクションは実際にそれを実装するプロセスを指示します。

4

コードは次のとおりです。URLからRSSフィードを取得し、アンドロイドのリストビューに表示するには

あなたは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に私のプロジェクトをダウンロードして確認することができます。このプロジェクトはトルコのスポーツチャンネルに関するものです。 1つのアプリケーションにすべて同じようなものです。

プロジェクトのソースコードはgithubで確認できます。

関連する問題