RSSリーダーを作成する。ファイル一式

今回は、外部サイトITproさんの記事を読んで、RSSリーダーを作成しました。

RSSリーダーを作成する。リストビューとItemを作成

RSSリーダーを作成する。xmlとかをパースする。

RSSリーダーを作成する。詳細画面を表示する。

今回は上記のそうまとめ作成ファイルをまとめさせていただきまして

次のような形で表示がされました。

rss1

クリック時

rss2

ファイル名には大文字をつけてはいけないと今回しりました。。

ファイル:main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<ListView android:layout_height="wrap_content" 
 android:id="@+id/listView1" android:layout_width="fill_parent"></ListView>
</LinearLayout>

ファイル:itemlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView1" 
 android:textColor="#ffffff"
 android:lines="1"
 android:textSize="18sp"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></TextView>
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView2" 
 android:lines="2"
 android:ellipsize="end"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></TextView>
</LinearLayout>

ファイル:item_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical">
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView1" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></TextView>
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView2" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></TextView>
</LinearLayout>

ファイル:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="in.andante.rssReads"
 android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="7" />
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

 <application android:icon="@drawable/icon" android:label="@string/app_name">
 <activity android:name=".rssReads"
 android:label="@string/app_name">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 <activity
 android:name=".ItemDetailActivity">
 </activity>
 </application>
</manifest>

ファイル:rssReads.java

package in.andante.rssReads;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class rssReads extends Activity implements OnItemClickListener{
 public static final String RSS_FEED_URL = "http://andante.in/i/feed/";
 private ArrayList mItems;
 private RssListAdapter mAdapter;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 mItems = new ArrayList();
 mAdapter = new RssListAdapter(this, mItems);

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

 //_listview.setAdapter(mAdapter);

 // タスクを起動する
 RssParserTask task = new RssParserTask(this, mAdapter,_listview);
 task.execute(RSS_FEED_URL);
 _listview.setOnItemClickListener(this);

 // サンプル用に空のItemオブジェクトをセットする
 /*for (int i = 0; i < 10; i++) {
 mAdapter.add(new Item());
 }*/
 }

 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
 // TODO Auto-generated method stub
 Item item = (Item)mItems.get(arg2);
 Intent intent = new Intent(this, ItemDetailActivity.class);
 intent.putExtra("TITLE", item.getTitle());
 intent.putExtra("DESCRIPTION", item.getDescription());
 startActivity(intent);
 }

}

ファイル:Item.java

package in.andante.rssReads;

public class Item {
 private CharSequence mTitle;
 private CharSequence mDescription;

 public Item(){
 mTitle = "";
 mDescription="";
 }

 public CharSequence getDescription(){
 return mDescription;
 }

 public void setDescription(CharSequence description){
 mDescription = description;
 }

 public CharSequence getTitle(){
 return mTitle;
 }

 public void setTitle(CharSequence title){
 mTitle = title;
 }

}

ファイル:RssListAdapter.xml

package in.andante.rssReads;

import java.util.List;

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 RssListAdapter extends ArrayAdapter<Item> {

 private LayoutInflater mInflater;
 private TextView mTitle;
 private TextView mDescr;

 public RssListAdapter(Context context, List<Item> objects) {
 super(context,0, objects);
 // TODO Auto-generated constructor stub
 mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }

 //一行ごとのビューを作成する。
 public View getView(int position, View convertView,ViewGroup parent){
 View view = convertView;
 if(convertView == null){
 view = mInflater.inflate(R.layout.itemlayout, null);
 }
 //何番目の値を取得?
 Item item = this.getItem(position);
 if(item != null){
 String title = item.getTitle().toString();
 mTitle = (TextView)view.findViewById(R.id.textView1);
 mTitle.setText(title);
 String descr = item.getDescription().toString();
 mDescr = (TextView)view.findViewById(R.id.textView2);
 mDescr.setText(descr);
 }
 return view;
 }
}

ファイル:RssParserTask.xml

package in.andante.rssReads;

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

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

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

//RssParserTask.java
public class RssParserTask extends AsyncTask<String, Integer, RssListAdapter> {

 private rssReads mActivity;
 private RssListAdapter mAdapter;
 private ProgressDialog mProgressDialog;
 private ListView mListView;

 // コンストラクタ
 public RssParserTask(rssReads activity, RssListAdapter adapter,ListView _listView) {
 mActivity = activity;
 mListView = _listView;
 mAdapter = adapter;
 }

 // タスクを実行した直後にコールされる
 @Override
 protected void onPreExecute() {
 // プログレスバーを表示する
 mProgressDialog = new ProgressDialog(mActivity);
 mProgressDialog.setMessage("Now Loading...");
 mProgressDialog.show();
 }

 // バックグラウンドにおける処理を担う。タスク実行時に渡された値を引数とする
 @Override
 protected RssListAdapter doInBackground(String... params) {
 RssListAdapter result = null;
 try {
 // HTTP経由でアクセスし、InputStreamを取得する
 URL url = new URL(params[0]);
 InputStream is = url.openConnection().getInputStream();
 result = parseXml(is);
 } catch (Exception e) {
 e.printStackTrace();
 }
 // ここで返した値は、onPostExecuteメソッドの引数として渡される
 return result;
 }

 // メインスレッド上で実行される
 @Override
 protected void onPostExecute(RssListAdapter result) {
 mProgressDialog.dismiss();
 mListView.setAdapter(result);
 }

 // XMLをパースする
 public RssListAdapter parseXml(InputStream is) throws IOException, XmlPullParserException {
 //パーサーを作成する。
 XmlPullParser parser = Xml.newPullParser();
 try {
 //パーサーにinputStraemをセットする。これはURLを読み込んでいるStream
 parser.setInput(is, null);

 //読み込みの進捗をここから取得ができる。(値はSTARTなどが存在する。)
 int eventType = parser.getEventType();
 Item currentItem = null;
 while (eventType != XmlPullParser.END_DOCUMENT) {
 String tag = null;
 switch (eventType) {
 case XmlPullParser.START_TAG:
 tag = parser.getName();
 if (tag.equals("item")) {
 currentItem = new Item();
 } else if (currentItem != null) {
 if (tag.equals("title")) {
 //タイトルタグの中身の文字の事
 currentItem.setTitle(parser.nextText());
 } else if (tag.equals("description")) {
 //説明タグの中身の文字の事
 currentItem.setDescription(parser.nextText());
 }
 }
 break;
 case XmlPullParser.END_TAG:
 tag = parser.getName();
 if (tag.equals("item")) {
 mAdapter.add(currentItem);
 }
 break;
 }
 eventType = parser.next();
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 return mAdapter;
 }
}

ファイル:ItemDetailActivity.xml

package in.andante.rssReads;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class ItemDetailActivity extends Activity {
 private TextView mTitle;
 private TextView mDescr;

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

 Intent intent = getIntent();

 String title = intent.getStringExtra("TITLE");
 mTitle = (TextView) findViewById(R.id.textView1);
 mTitle.setText(title);
 String descr = intent.getStringExtra("DESCRIPTION");
 mDescr = (TextView) findViewById(R.id.textView2);
 mDescr.setText(descr);

 }

}

以上で、お見苦しい部分もあるかと思いますが、お役に立てれば幸いです。

前後の記事

前の記事:

次の記事:

関連の記事

コメント

:D 【Androidアプリ開発】第7回:RSSリーダー(テキスト情報取得) | Apploid – アップロイド

[…] 2011.08.10 参考サイト:RSSリーダーを作成する。ファイル一式 を試してみました。 […]

:D 【Androidアプリ開発】第8回:RSSリーダー(WEBページ表示) | Apploid – アップロイド

[…] 参考サイト: RSSリーダーを作成する。ファイル一式 より、RSSからタグ情報を取得する処理(RssParserTask.java)より、 […]

:D 勉強させていただいてます

ITProの記事でうまくいかず、こちらを参考にさせていただいたのですが、最後の最後に
rssReads.java:_listview.setOnItemClickListener(this);
の部分でエラーになります。
当然ですが、コメントアウトするとエラーは消えますが詳細画面が表示されません。
エラー内容
”AdapterViewのメソッドはrssReadsの引数にできません”
ヒントをいただけないでしょうか。

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑