2016-07-12 5 views
1

私はRSSフィードを2日間アンドロイドに実装しようとしており、インターネット上で適切かつ簡単な例を見つけることができません。私はWebViewを使用してそれをやったが、それは私の要件に一致しません。いずれも私の画像、タイトル、説明、日付、などのフィードアンドロイドスタジオ - 必要なRSSフィードの例

このアプリのdoesntの負荷の問題

おかげ

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()) 
        .commit(); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends ListFragment { 

//  private TextView mRssFeed; 

     public PlaceholderFragment() { 
     } 

//When I uncomment onCreateView it says unfortunately app has stopped 

//  @Override 
//  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
//         Bundle savedInstanceState) { 
//   View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
//   mRssFeed = (TextView) rootView.findViewById(R.id.rss_feed); 
//   return rootView; 
//  } 

     @Override 
     public void onStart() { 
      super.onStart(); 
      new GetAndroidPitRssFeedTask().execute(); 
     } 

    private String getAndroidPitRssFeed() throws IOException { 
     InputStream in = null; 
     String rssFeed = null; 
      try { 
       URL url = new URL("http://www.androidpit.com/feed/main.xml"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       in = conn.getInputStream(); 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       byte[] buffer = new byte[1024]; 
       for (int count; (count = in.read(buffer)) != -1;) { 
        out.write(buffer, 0, count); 
       } 
       byte[] response = out.toByteArray(); 
       rssFeed = new String(response, "UTF-8"); 
      }finally { 
       if (in != null) { 
        in.close(); 
      } 
     } 
     return rssFeed; 
    } 

    private class GetAndroidPitRssFeedTask extends AsyncTask<Void, Void, List<String>> { 

      @Override 
      protected List<String> doInBackground(Void... voids) { 
       List<String> result = null; 
       try { 
        String feed = getAndroidPitRssFeed(); 
        result = parse(feed); 
       } catch (XmlPullParserException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       return result; 
      } 

      private List<String> parse(String rssFeed) throws XmlPullParserException, IOException { 
       XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
       XmlPullParser xpp = factory.newPullParser(); 
       xpp.setInput(new StringReader(rssFeed)); 
       xpp.nextTag(); 
       return readRss(xpp); 
      } 

      private List<String> readRss(XmlPullParser parser) 
        throws XmlPullParserException, IOException { 
       List<String> items = new ArrayList<>(); 
       parser.require(XmlPullParser.START_TAG, null, "rss"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 

        String name = parser.getName(); 

        if (name.equals("channel")) { 
         items.addAll(readChannel(parser)); 
        } else { 
         skip(parser); 
        } 
       } 
       return items; 
      } 

      private List<String> readChannel(XmlPullParser parser) 
        throws IOException, XmlPullParserException { 
       List<String> items = new ArrayList<>(); 
       parser.require(XmlPullParser.START_TAG, null, "channel"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 
        String name = parser.getName(); 
        if (name.equals("item")) { 
         items.add(readItem(parser)); 
        } else { 
         skip(parser); 
        } 
       } 
       return items; 
      } 

      private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException { 
       String result = null; 
       parser.require(XmlPullParser.START_TAG, null, "item"); 
       while (parser.next() != XmlPullParser.END_TAG) { 
        if (parser.getEventType() != XmlPullParser.START_TAG) { 
         continue; 
        } 
        String name = parser.getName(); 
        if (name.equals("title")) { 
         result = readTitle(parser); 
        } else { 
         skip(parser); 
        } 
       } 


     return result; 
     } 

     // Processes title tags in the feed. 
     private String readTitle(XmlPullParser parser) 
       throws IOException, XmlPullParserException { 
      parser.require(XmlPullParser.START_TAG, null, "title"); 
      String title = readText(parser); 
      parser.require(XmlPullParser.END_TAG, null, "title"); 
      return title; 
      } 



private String readText(XmlPullParser parser) 
       throws IOException, XmlPullParserException { 
      String result = ""; 
      if (parser.next() == XmlPullParser.TEXT) { 
       result = parser.getText(); 
       parser.nextTag(); 
      } 
      return result; 
     } 

      private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { 
       if (parser.getEventType() != XmlPullParser.START_TAG) { 
        throw new IllegalStateException(); 
       } 
       int depth = 1; 
       while (depth != 0) { 
        switch (parser.next()) { 
         case XmlPullParser.END_TAG: 
          depth--; 
          break; 
         case XmlPullParser.START_TAG: 
          depth++; 
          break; 
        } 
       } 
      } 

      @Override 
      protected void onPostExecute(List<String> rssFeed) { 
       if (rssFeed != null) { 
        setListAdapter(new ArrayAdapter<>(
          getActivity(), 
          android.R.layout.simple_list_item_1, 
          android.R.id.text1, 
          rssFeed)); 
       } 
      } 
     } 
    } 

これはfragment_mainでいただきました!私は理解カント何かを取り出す簡単な例を与えることができます。 XMLは、これは

activity_mainさ

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 


    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:id="@+id/rss_feed" 
      android:text="@string/hello_world" 
      android:paddingTop="@dimen/activity_vertical_margin" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </ScrollView> 
</RelativeLayout> 

relativelayout含まれてい

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/container" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="arittek.com.androidpitrss.MainActivity" 
    tools:showIn="@layout/activity_main"> 


</RelativeLayout> 
+0

これを読んでみてくださいhttp://www.androidhive.info/2011/11/android-xml-parsing-tutorial/ – sijeesh

+0

少なくともあなたのコードをここに追加して、他の人があなたを助けることができるようにしてください。 –

+0

私は簡単な例が必要です@Jul 55 –

答えて

1

私は便利なこれら二つのプロジェクトを発見した:

https://github.com/ShirwaM/Simplistic-RSS

https://github.com/matshofman/Android-RSS-Reader-Library

は、あなたがそれらをダウンロードし、それが働いた

+0

これらのリンクを試してみましたが、これらはすでに古すぎ、gradleを使用していません。 @Eliahu Horwitz –

+0

ソースコードをダウンロードしてAndroidスタジオをダウンロードしてから、図のようにオブジェクトを使用してください –

0

ニーズ(ATOM/RSS /メディアなど)にカスタマイズすることができます私のためにSimple-Rss2-Android

SimpleRss2Parser parser = new SimpleRss2Parser("http://pingeb.org/feed", 
    new SimpleRss2ParserCallback() { 
     @Override 
     public void onFeedParsed(List<RSSItem> items) { 
      for(int i = 0; i < items.size(); i++){ 
       Log.d("SimpleRss2ParserDemo",items.get(i).getTitle()); 
      } 
     } 
     @Override 
     public void onError(Exception ex) { 
      Toast.makeText(mContext, ex.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }; 
); 
parser.parseAsync(); 
+0

これはフィードが表示されないことを意味します。ボタンを削除してonCreateのコードをactivity_mainファイルに貼り付けても試しました –