Android開発のお勉強

メニュー

E-Mail



RSSリーダを作る

RSSを読み込んで、ListViewに表示します。


● ListViewのカスタマイズ
 レイアウトファイル(rss_list.xml)を作成します。
 タイトルと要約を表示するTextViewを配置します。


<?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" >


    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />

<TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:text="TextView" />

</RelativeLayout>




● ItemBean
 RSSの内容を格納するBeanを作成します。
タイトルと要約を格納します。



public class ItemBean {

    private String title;
    private String summary;


    public void setTitle(String title) {
        this.title = title;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getTitle() {
        return this.title;
    }

    public String getSummary() {
        return this.summary;
    }

}




● Adapter
ArrayAdapterを継承したクラスを作成します。
getViewでタイトルと要約を表示するように実装します。


import java.util.List;

import android.content.ClipData.Item;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class RssAdapter extends ArrayAdapter<ItemBean> {

    private LayoutInflater inflater;

     public RssAdapter(Context context, int id, List<Item> items) {
         super(context, id);

         inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


     public View getView(int position, View view,ViewGroup parent){

         if(view == null){
             view = inflater.inflate(R.layout.rss_llist, null);
         }

         ItemBean item = this.getItem(position);

         if(item != null){

             TextView titleText = (TextView)view.findViewById(R.id.textView1);
             titleText.setText(item.getTitle());

             TextView contentsText = (TextView)view.findViewById(R.id.textView2);
             contentsText.setText(item.getSummary());
         }
         return view;
    }
}





● AsyncTask
AsyncTaskを継承したクラスを作成します。
RSSを読み込んで、Adapterクラスを作成し、
ListViewに設定します。



import java.io.InputStream;
import java.net.URL;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;

import android.os.AsyncTask;
import android.util.Xml;
import android.widget.ListView;

public class RssAsyncTask extends AsyncTask<String, Integer, RssAdapter> {

    private ListView listView;
    private RssAdapter rssAdapter;


    public RssAsyncTask(ListView listView,RssAdapter rssAdapter) {
        this.listView = listView;
        this.rssAdapter = rssAdapter;
    }


    @Override
    protected RssAdapter doInBackground(String... arg0) {


         String url = "http://blog.nogizaka46.com/atom.xml";

     DefaultHttpClient client = new DefaultHttpClient();
     HttpUriRequest req = new HttpGet(url);
     HttpResponse res = null;

         try {

         res = client.execute(req);

         XmlPullParser xmlPullParser = Xml.newPullParser();
         xmlPullParser.setInput(res.getEntity().getContent(),"UTF-8");


             ItemBean item = null;

             for(int e = xmlPullParser.getEventType(); e != XmlPullParser.END_DOCUMENT; e = xmlPullParser.next()){


                if (e == XmlPullParser.START_TAG) {
                    if (xmlPullParser.getName().equals("entry")) {
                        item = new ItemBean();
                    }
                    if (xmlPullParser.getName().equals("title")) {
                        if (item != null) item.setTitle(xmlPullParser.nextText());
                    }

                    if (xmlPullParser.getName().equals("summary")) {
                        if (item != null) item.setSummary(xmlPullParser.nextText());
                    }
                }
                if (e == XmlPullParser.END_TAG && xmlPullParser.getName().equals("entry")) {
                     rssAdapter.add(item);
                }
             }


         } catch (Exception e) {
         e.printStackTrace();
         }
         return rssAdapter;
    }

     @Override
     protected void onPostExecute(RssAdapter res) {
         listView.setAdapter(res);
     }

}






● Activity
 作成したAsyncTaskを継承したクラス(RssAsyncTask)を生成し、実行します。



import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;

public class RssReaderActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rss_reader);

        ArrayList items = new ArrayList();
        RssAdapter rssAdapter = new RssAdapter(this, R.layout.rss_llist,items);

        ListView listView = (ListView)findViewById(R.id.listView1);

        RssAsyncTask rssAsyncTask = new RssAsyncTask(listView,rssAdapter);
        rssAsyncTask.execute("");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_rss_reader, menu);
        return true;
    }
}





Copyright (C) Androidアプリ開発のお勉強. All Rights Reserved.