RSS Reader dengan Android
Penulis : Agus Haryanto
http://agusharyanto.net
agus.superwriter@gmail.com
Di web-web yang sudah tekenal dan banyak pengunjungnya biasanya menyediakan RSS Feed yang
bisa diakses tujuannya jelas untuk memudahkan orang berkunjung ke webnya dan juga informasi
terbaru dari web tersebut dapat diketahui oleh pembaca setianya.
Saya sudah coba beberapa tutorial membuat RSSReader dengan Android yang readernya
menggunakan java murn, tapi setelah test beberapa telihat kurang stabil ada kalanya bisa memab rss
feed dari Web A tetapi tidak bisa baca RSSFedd dari Web B.
Akhirnya saya coba alternatif lain untuk readernya dengan menggunakan WebView yang
mengembed dokumen html yang dapat membaca rssfeed. Dan hasilnya memuaskan. Otak dari
Librarynya adalah ZRSSFEED.
Sekarang mari kita mulai
1. Siapkan daftae URL yang akan kita baca RSSFeednya. Karenda disini banyak dari jurusan
Ekonomi.
WebSite
Alamat
Detik Finance
http://rss.detik.com/index.php/finance
Inilah.com Ekonomi
http://www.inilah.com/rss/feed/ekonomi/
Antara Bisnis
http://www.antara.co.id/rss/ekb.xml
Oke Zone
http://sindikasi.okezone.com/index.php/economy/RSS2.0
VivaNews Bisnis
http://rss.vivanews.com/get/bisnis
Klik Next terus sampai finish. Setelah itu project akan terbuat dan tampil dijendela package
explorer.
2. Edit activity_main.xml lalu ketikan kode berikut
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/listViewSite" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView>
</RelativeLayout>
3. Buat layout baru dengan nama activity_rssreader.xml lalu ketikan kode berikut
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> <ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout>4. Buta Layout untuk item yang akan digunakan dalam listview dengan nama list_item_site.xml
lalu ketikan kode berikut
<?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/textViewSite" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text = "Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textViewSiteUrl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textViewSite" android:text = "TextView" /> </RelativeLayout>
5. Edit MainActivity.java lalu ketikan kode berikut
package com.agusharyanto.rssreader; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter;public class MainActivity extends Activity { ListView listView1;
private ArrayList<HashMap<String, String>> sitelist = new ArrayList<HashMap<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initData();
}
public void initData() {
sitelist.add(genHashMap("Detik Finance","http://rss.detik.com/index.php/finance")); sitelist.add(genHashMap("Inilah.com Ekonomi","http://www.inilah.com/rss/feed/ekonomi/")); sitelist.add(genHashMap("Antara Bisnis","http://www.antara.co.id/rss/ekb.xml")); sitelist.add(genHashMap("Okezone Ekonomi","http://sindikasi.okezone.com/index.php/economy/RSS2.0")); sitelist.add(genHashMap("VivaNews Bisnis","http://rss.vivanews.com/get/bisnis")); setListData(); }
public HashMap<String, String> genHashMap(String name, String url) { HashMap<String, String> map = new HashMap<String, String>(); map.put("name", name);
map.put("url", url); return map;
}
public void setListData() {
listView1 = (ListView) findViewById(R.id.listViewSite); ListAdapter adapter = new SimpleAdapter(this, sitelist,
R.layout.list_item_site, new String[] { "name","url" }, new int[] { R.id.textViewSite, R.id.textViewSiteUrl }); listView1.setAdapter(adapter);
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// showToast("kesini", 0);
HashMap<String, String> radio = (HashMap<String, String>) listView1 .getItemAtPosition(position);
// Toast.makeText(getBaseContext(), "ID '" + o.get("id") + // "' was clicked.", Toast.LENGTH_SHORT).show();
callIntent(radio); }
}); }
public void callIntent(HashMap<String, String> radio) {
Intent intent = new Intent(this, RSSReaderActivity.class); intent.putExtra("object", radio);
startActivity(intent); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);
return true; }
}
6. Untuk menampilkan RSS Feednya buat class baru dengan nama RSSReaderActivity.java lalu
ketikan kode berikut
package com.agusharyanto.rssreader; import java.util.HashMap; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.Toast;
public class RSSReaderActivity extends Activity { private WebView web;
ProgressBar progressBar; String rssurl;
String localurl = "file:///android_asset/rssreader/index.html"; int flag = 0;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rssreader); web = (WebView) findViewById(R.id.webView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1); web
.getSettings().setJavaScriptEnabled( true ); Bundle extras = getIntent().getExtras(); if (extras == null) {
return; }
web.setWebViewClient(new myWebClient());
HashMap<String, String> rsssite = (HashMap<String, String>) extras.get( "object" );
rssurl = rsssite.get("url"); setTitle(rsssite.get("name")); web.loadUrl(localurl);
}
public class myWebClient extends WebViewClient { @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) { // logDebug("Loading URL: " + url);
super.onPageStarted(view, url, favicon); if (!localurl.equals(web.getUrl())) {
progressBar.setVisibility(View.VISIBLE); }
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub
view.loadUrl(url); return true; }
@Override
public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (localurl.equals(web.getUrl())) { web.loadUrl("javascript:setRSSFeed('" + rssurl + "')"); } progressBar.setVisibility(View.GONE); } } @Override
// Check if the key event was the BACK key and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
web.goBack(); return true; }
// If it wasn't the BACK key or there's no web page history, bubble up // to the default
// system behavior (probably exit the activity) return super.onKeyDown(keyCode, event);
}
}
7. Pada class diatas terlihat bahwa untuk menampilkan Rss Feed nya kita memanfaatkan webview
yang meload dokumen pada directory /asset/deploy/index.html , dimana disini kita menggunakan
library jquery dan zrssfeed untuk menampilkan rss feed. Jika ingin tahu lebih jelas bisa berkunjung
ke http://www.zazar.net/developers/jquery/zrssfeed/ . Untuk keperluan pembuatan aplikasi ini saya
sudah siapkan filenya dan bisa di download di
9. Buka file index.html pada directory /asset/rssreader
<!DOCTYPE html><html> <head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link href="jquery.zrssfeedmod.css" rel="stylesheet" type="text/css" /> <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="jquery.zrssfeed.min.js" type="text/javascript"></script> <title>zRSSFeed - Selecting RSS feeds from a menu</title>
<script type="text/javascript"> function setRSSFeed(feedurl) { if (feedurl) { $('#loadingmessage').show(); $('#rssfeed').rssfeed(feedurl, { media : false, header : false }, function(e) { $('#loadingmessage').hide(); }); } } </script> </head> <body>
<div id='loadingmessage' style='display:none; text-align: center;'> <img src='img/ajax-loader.gif'/>
</div>
<div id="rssfeed"></div> </body>
</html>