It's tutorial about how to create app rss feed for android | Tutorial cara membuat aplikasi rss feed untuk android, untuk kelengkapan data silahkan anda bisa mengunjungi demo video tutorial nya di http://goo.gl/eFP7Gq
creatorb
Bel ajar android kali ini akan membahas tentang pembuatan katalog produk pada aplicais android yang ditampilkan dalam bentuk Grid yang didalamnya ada gambar, nama dan harga
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLitecreatorb dev
Full Source Visit : http://creatorb-lab.blogspot.com/2014/12/cara-membuat-aplikasi-android-resep.html
How to Create Android Recipe App | Cara Membuat Aplikasi Android Resep Masakan | Tutorial Membuat Aplikasi Android
creatorb
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhanacreatorb dev
Simple Tutorial About How to Create Simple Android App.
Included Many App tutorial:
- How to Create Android App Calculator.
- How to Create Android App Learn Vegetables.
- How to Create Android App Background Coloring.
- How to Create Android App Puzzle.
- How to Create Android App Notes - Database SQLite.
- How to Create Android App RSS feed,
- How to Create Android App Catalog Company Profile.
Tutorial Lengkap Cara Membuat Aplikasi Android dengan penjabaran yang mudah dan dilengkapi dengan tutorial membuat beberapa aplikasi:
- Cara Membuat Android App Kalkulator.
- Cara Membuat Android App Pelajari Sayuran.
- Cara Membuat Android App Mewarnai Latar Belakang.
- Cara Membuat Android App Puzzle.
- Cara Membuat Android App Catatan - database SQLite.
- Cara Membuat Android App RSS feed,
- Cara Membuat Android App Profil Katalog Perusahaan.
Bel ajar android kali ini akan membahas tentang pembuatan katalog produk pada aplicais android yang ditampilkan dalam bentuk Grid yang didalamnya ada gambar, nama dan harga
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLitecreatorb dev
Full Source Visit : http://creatorb-lab.blogspot.com/2014/12/cara-membuat-aplikasi-android-resep.html
How to Create Android Recipe App | Cara Membuat Aplikasi Android Resep Masakan | Tutorial Membuat Aplikasi Android
creatorb
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhanacreatorb dev
Simple Tutorial About How to Create Simple Android App.
Included Many App tutorial:
- How to Create Android App Calculator.
- How to Create Android App Learn Vegetables.
- How to Create Android App Background Coloring.
- How to Create Android App Puzzle.
- How to Create Android App Notes - Database SQLite.
- How to Create Android App RSS feed,
- How to Create Android App Catalog Company Profile.
Tutorial Lengkap Cara Membuat Aplikasi Android dengan penjabaran yang mudah dan dilengkapi dengan tutorial membuat beberapa aplikasi:
- Cara Membuat Android App Kalkulator.
- Cara Membuat Android App Pelajari Sayuran.
- Cara Membuat Android App Mewarnai Latar Belakang.
- Cara Membuat Android App Puzzle.
- Cara Membuat Android App Catatan - database SQLite.
- Cara Membuat Android App RSS feed,
- Cara Membuat Android App Profil Katalog Perusahaan.
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
Materi yang berisikan tutorial login ke server degna menggunakan library volley dimana untuk server sidenya ditangani oleh PHP dan databasenya menggunakan MySQL
Belajar Android Studio CRUD Data MahasiswaAgus Haryanto
Belajar Android Studio yang berfokus pada operasi CRUD Insert, Select, Update dan Delete pada database SQLite Android dengan mengambil contoh data mahasiswa
Embarcadero® Delphi® XE5 is easy-to-learn app development for teams building true native apps for Android and iOS, and getting them to app stores and enterprises fast. Build apps using the same source codebase without sacrificing app quality, connectivity or performance. With native Android and iOS support, reach the largest addressable mobile markets in the world.
Belajar Android PHP MySQL Login dengan VolleyAgus Haryanto
Materi yang berisikan tutorial login ke server degna menggunakan library volley dimana untuk server sidenya ditangani oleh PHP dan databasenya menggunakan MySQL
Belajar Android Studio CRUD Data MahasiswaAgus Haryanto
Belajar Android Studio yang berfokus pada operasi CRUD Insert, Select, Update dan Delete pada database SQLite Android dengan mengambil contoh data mahasiswa
Embarcadero® Delphi® XE5 is easy-to-learn app development for teams building true native apps for Android and iOS, and getting them to app stores and enterprises fast. Build apps using the same source codebase without sacrificing app quality, connectivity or performance. With native Android and iOS support, reach the largest addressable mobile markets in the world.
Learn more about Embarcadero data modeling solutions at http://embt.co/data-modeling
The ER/Studio Enterprise Team edition provides model and metadata collaboration and enables faster and more effective decision-making using more accurate data. The flagship ER/Studio Data Architect is the foundation for this comprehensive suite that also includes import and export bridges, a model repository, and a data source registry. Additionally, the ER/Studio Team Server Core in this edition allows unlimited web user access to models and metadata, and provides greater meaning, understanding and context to enterprise data with an extensible glossary so users can view, store and centrally manage authoritative business definitions.
Prezentarea sustinuta de Pawel Glowacki a facut obiectul evenimentului organizat de Softline Romania in calitate de distribuitor si Embarcadero pe data de 5 septembrie la hotelul Howard Johnson din Bucuresti, în cadrul RAD Studio XE5 Tech Preview World Tour.
Watch the full presentation video on demand at http://embt.co/GTK-ERS-TS
ER/Studio Team Server increases the value of enterprise data by giving employees across the organization the ability to use and improve metadata through team collaboration.
Watch this on-demand webinar to learn how ER/Studio
Team Server helps you master your metadata. With this offering, you can:
+ Collaborate with your extended team on an enterprise glossary
+ Integrate key business terms and definitions with business systems
+ View, store, and manage a single source of business definitions
+ Attach business policies to daily workflows with contextual alerts and tips
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]pakmin
Tutorial berikut merupakan tutorial terlengkap yang disertai gambar, Mulai dari instalasi awal sampai dengan login ubuntu server yang anda buat. Sesuai dengan banyaknya permintaan agar dibuatkannya tutorial instalasi ubuntu server secara lengkap dan detail, Dengan ini kami akan memberikannya sesuai dengan permintaan para pengunjung sigernetwork.com. Oke baiklah kita akan mulai satu persatu tutorial instalasi ubuntu server secara lengkap.
Tutorial Cara Instalasi Ubuntu Linux Lengkapcreatorb dev
Tutorial Cara Instalasi Ubuntu Linux Lengkap, cara install linux lengkap. Tutorial ini berisi cara instalasi linux lengkap cocok bagi anda yang baru mengenal linux, dalam tutorial ini disajikan dengan bahasa baku yang mudah di pahami denga beberapa link referal yang semakin memudah kan pembelajaran.
Tugas Matakuliah Semantik Web 3
Prodi S1 Ilmu Perpustakaan Universitas Negeri Malang
Dosen : Moh. Safii, S.Kom, M.Hum
Nama :
1. Shinta Putri Priandhani (150214608718)
2. Eva Devita Emilia Siswanti (150214608747)
Artikel ini akan menjabarkan tentang bagaimana membuat modul crud sederhana dengan framework Laravel 5 (pada saat tulisan ini dibuat, yang digunakan versi 5.6). Yaitu bagaimana membuat modul untuk menginput informasi, menyimpan, mengedit, dan juga menghapusnya. Untuk keperluan ini, Laravel yang merupakan framework PHP MVC populer memiliki fitur bawaan yang mempermudah kita dalam membuat modul CRUD.
2. Tujuan
Membuat aplikasi android dengan konsep penampil media informasi, dimana
aplikasi yang akan dibuat ini adalah menampilkan artikel artikel islami yang dimuat
dalam web muslim.or.id dan untuk menampilkan saluran berita lain bisa kita rubah
target url nya sesuai yang di kehendaki.
Materi
i. Membuat splashscreen.
ii. Membuat listview.
iii. Load data mengguanakan http request.
iv. Membuat tombol style refresh.
v. Memparsing dan mengolah data.
vi. Menampilkan data pada webview.
Persiapan
Tool : Android sdk + eclipse (ADT)
OS : ubuntu precise pangolin 12.04 (optional)
JAVA 8 (optional)
3. Pembahasan
1) Pertama persiapkan pembuatan project dengan membuat project
baru File > New > Android Applications Project , disini saya
isi dengan nama MuslimNews.
Dan selebihnya anda bisa menyesuaikan sendiri kustomisasi icon
dan nama class activitynya.
2) Selanjutnya kita akan membuat splash screen adapun properti
yang diperlukan untuk berjalannya splashscreen yang dibuat ini
adalah sbb:
View :
- splash.xml
main.
xml
alpha.
xml
translate.
xml
Controler :
Splash.
java
Other :
Androidmanifest.
xml
image
splash drawable.
4. Berikut kodingannya:
splash.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/splashscreen" > //set gambar splash
< FrameLayou t
android:id="@+id/FrameLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleSmall"
android:layout_width="109dp"
android:layout_height="105dp"
android:layout_gravity="center" />
</FrameLayout>
</RelativeLayout>
Setelah file splash telah dibuat selanjutnya, membuat style
animasi nya. Buat folder anim di /res dan selanjutnya dalam
folder /res/anim maka isi dengan dua file berikut ini. alpha.xml
dan translate.xml dalam fungsinya alpha untuk memberikan efek
fade in sedangkan translate akan memberikan efek animasi singkap
dari bawah ke atas.
alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="3100" />
translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
5. <translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="0%"
android:fromYDelta="200%"
android:toYDelta="0%"
android:duration="2000"
android:zAdjustment="top" />
</set>
selanjutnya adalah class Splash.java disini saya memasukakkan
class nya pada package id.creatorb.muslimnews.splashscreen untuk
lebih terstruktur.
package id.creatorb.muslimnews.splashscreen;
import id.creatorb.muslimnews.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
public class Splash extends Activity {
protected boolean _active = true;
protected int _splashTime = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
StartAnimations();//Menjalankan Method Start Animasi
Thread splashThread = new Thread() {
//Timer Splash
public void run() {
try{
int waited = 0;
while(_active && (waited < _splashTime)) {
sleep(700);
if(_active) {
waited += 700;
}
}
} catch(InterruptedException e) {
// do nothing
} finally {
finish();
6. Intent newIntent=new Intent(Splash.this,
id.creatorb.muslimnews.activity.MainActivity.class);//pindah Activity Main
startActivityForResult(newIntent,0);
}
}
};
splashThread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
_active = false;
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.splash, menu);
return true;
}
//Disini Deklarasi Animasinya(StartAnimation)
private void StartAnimations() {
// TODO Auto-generated method stub
//Animasi untuk Frame Layout mengunakan alpha.xml
Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
anim.reset();
FrameLayout l=(FrameLayout) findViewById(R.id.FrameLayout1);
l.clearAnimation();
l.startAnimation(anim);
//Animasi untuk ProgressBar1 mengunakan alpha.xml
Animation anim1 = AnimationUtils.loadAnimation(this, R.anim.alpha);
anim1.reset();
ProgressBar l1=(ProgressBar) findViewById(R.id.progressBar1);
l1.clearAnimation();
l1.startAnimation(anim);
}
}
Bisa dilihat dalam intent terdapat kodingan seperti ini, Intent
newIntent=new Intent(Splash.this,
id.creatorb.muslimnews.activity.MainActivity.class); dengan pengertian
sebenarnya merupakan intent untuk perpindahan dari class Splash
menuju class MainActivity ketika paramater waktu yang ditentukan
telah habis. Dan gambar dibawah ini adalah tampilan splashscreen
yang dibuat dengan menampilkan file gambar pada
/drawable/splashscreen.png
7. Selanjutnya tampilan menu, dimana dalam tampilan menunya
menggunakan ListView yang memuat short list artikel dari web
muslim.or.id . Dalam tampilan ListView sendiri memuat 3 komponen
diantaranya ImageView (menampilkan logo muslim.or.id) , kemudian
judul artikel/berita yang dimuat, selanjutnya tanggal artikel
tersebut di posting. Lebih jelasnya gambarnya seperti dibawah
ini:
8. Seperti gambar di atas, menyesuaikan ListView dengan komponen
lainnya Android. Pertama, tambahkan ImageView di sebelah kiri
setiap item ListView. Kemudian, menambahkan dua TextView
sejajar dengan komponen gambar. Untuk teks seperti screenshoot
di atas, di format dengan gaya teks dengan huruf besar dan 2
baris. Untuk teks bagian bawah, dibuat font lebih kecil dari
yang atas. Lebih singkatnya dalam tata letak layout.xml ini,
saya menambahkan satu ImageView dan dua TextView di
RelativeLayout. Berikut kodingannya:
list_item_artikel.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="5dp"
android:background="#00BFFF">
9. < ImageVie w
android:id="@+id/postThumb"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="5dp"
android:scaleType="centerCrop"
android:src="@drawable/muslim_logo_creatorb" />
<TextView
android:id="@+id/postTitleLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/postThumb"
android:layout_toRightOf="@id/postThumb"
android:ellipsize="end"
android:maxLines="2"
android:tex t = "Post Box "
android:textIsSelectable = "false "
android:textSize="16sp" />
<TextView
android:id="@+id/postDateLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/postThumb"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/postThumb"
android:maxLines="1"
android:text = "Nov 10, 2014 "
android:textSize="12sp" />
</RelativeLayout>
Kemudian membuat nilai object baru untuk menahan semua data
postingan baru yang diambil pada web melalui rss.
PostData.java
package id.creatorb.muslimnews.activity.post;
public class PostData {
public String postThumbUrl;
public String postTitle;
public String postDate;
public String postLink;
public String postContent;
public String postGuid;
Kemudian selanjutnya untuk menampilkan data lengkap pada
masing masing listview membutuhkan adapater class untuk
mewariskan data dari ArrayAdapter dan override dari fungsi
getView untuk ditampilkan pada sebuah list.
10. Pada teknik listview seringkali kita dibentrokan dengan
beban load yang besar dikarenakan penerimaan data dari
server yang disimpan pada adapter dan semakin lama semakin
overload.
Maka untuk meningkatkan kinerjanya digunakan metode getView
dari data muat ulang dan tidak juga mengguanakan findViewbyId
melainkan view holder untuk menampilkannnya secara langsung
tanpa mencari permasing masing id nya. Berikut kodenya:
DaftarPostAdapter.java
package id.creatorb.muslimnews.activity.adapter;
import id.creatorb.muslimnews.activity.post.PostData;
import java.util.ArrayList;
import id.creatorb.muslimnews.R;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class DaftarPostAdapter extends ArrayAdapter<PostData> {
private LayoutInflater inflater;
private ArrayList<PostData> datas;
public DaftarPostAdapter(Context context, int textViewResourceId,
ArrayList<PostData> objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
inflater = ((Activity) context).getLayoutInflater();
datas = objects;
}
static class ViewHolder {
TextView postTitleView;
TextView postDateView;
ImageView postThumbView;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_artikel,
null);
viewHolder = new ViewHolder();
viewHolder.postThumbView = (ImageView) convertView
.findViewById(R.id.postThumb);
11. viewHolder.postTitleView = (TextView) convertView
.findViewById(R.id.postTitleLabel);
viewHolder.postDateView = (TextView) convertView
.findViewById(R.id.postDateLabel);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (datas.get(position).postThumbUrl == null) {
viewHolder.postThumbView
.setImageResource(R.drawable.muslim_logo_creato
rb);
}
viewHolder.postTitleView.setText(datas.get(position).postTitle);
viewHolder.postDateView.setText(datas.get(position).postDate);
return convertView;}
}
Selanjutnya adalah teknik pengambilan data melaui http
request. Jika kita menggunakan teknik http request tanpa
mempertimbangkan keefesiensitas maka bisa dipastikan aplikasi
kita akan terlihat hank/freeze/macet dalam memuat content
dari sebuah web karena dalam permintaan data pada sebuah
jaringan server membutuhkan konektifitas yang stabil dan
waktu tersendiri jika tidak ditangani dengan baik maka hal
pertama yang terjadi pada user interface kita adalah blank
sampai proses permintaan terpenuhi karena tidak ada aktifitas
yang dilakukan di layar karena sedang menangani proses
pengambilan data dari server. Menyiasati hal ini kita bisa
melakukan aktifitas tersebut di belakang layar, baik bisa
menggunanakan thread ataupun AsyncTask lalu apa perbedaan
dari keduanya ? Dan mana yang harus di pilih ? Itu bisa
disesuaikan dengan anda sendiri karena Sayangnya, menggunakan
thread dapat membuat kode anda lebih rumit dan lebih sulit
untuk dibaca. Untuk membebaskan masalah ini, saya sarankan
untuk menggunakan AsyncTask sebagai gantinya. Pada dasarnya
AsyncTask hanya dapat digunakan oleh subclass. Oleh karena
itu, saya akan membuat subclass dari AsyncTask di kelas
MainActivity, dan melaksanakan permintaan HTTP dalam
subclass. Seperti kode dibawah ini:
private class HTTPDownloadTask extends AsyncTask<String, Integer, PostData[]>
{
@Override
protected PostData[] doInBackground(String... params) {
// TODO Auto-generated method stub
String urlStr = params[0];
InputStream is = null;
12. try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
connection.setReadTimeout(10*1000);
connection.setConnectTimeout(10*1000);
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
int response = connection.getResponseCode();
Log.d("debug", "The response is: " + response);
is = connection.getInputStream();
//read string
final int bufferSize = 1024;
byte[] buffer = new byte[1024];
ByteArrayOutputStream os = new ByteArrayOutputStream();
while(true) {
int count = is.read(buffer, 0, bufferSize);
if(count == -1) {
break;
}
os.write(buffer);
}
os.close();
String result = new String(os.toByteArray(), "UTF-8");
Log.d("debug", result);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
Kemudian selanjutnya adalah memparsingnya, Dalam sampel kode
diatas, saya menggunakan HttpURLConnection untuk mendownload
data dari url. Kemudian, saya menggunakan ByteArrayOutputStream
untuk membaca semua data dari InputStream. Untuk tujuan debug,
saya mencetak data ke Log konsol. Setelah kita mendapatkan data
rss feed dari situs web, kita akan mengurai RSS Feed xml untuk
menjadikan ViewList, sedangkan untuk mengurai format data XML di
Android, menggunakan XmlPullParser, itu adalah XML mesin parse
yang direkomendasikan oleh situs Developer Android. Hal ini
dapat mengurai XML dalam cara yang efisien dan dipertahankan
pada Android. Selain itu, kita juga bisa memilih KXmlParser via
XmlPullParserFactory.newPullParser () atau ExpatPullParser via
Xml.newPullParser ().
13. Entah xml parser dapat bekerja dengan baik. Dalam situs
pengembang Android, sudah memberikan contoh untuk menunjukkan
bagaimana mengurai xml oleh ExpatPullParser. Dan berikut contoh
konsep dalam aplikasi ini :
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(is, null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
//mulai parsing
} else if (eventType == XmlPullParser.START_TAG) {
//cari permulaan tag
} else if (eventType == XmlPullParser.END_TAG) {
//caria khir tag
} else if (eventType == XmlPullParser.TEXT) {
//cari text diantara tag
}
eventType = xpp.next();
}
Dan untuk penerapan dari beberapa konsep diatas ada pada
MainActivity.java dengan beberapa kode berikut:
private class RssDataController extends
AsyncTask<String, Integer, ArrayList<PostData>> {
private RSSXMLTag currentTag;
@Override
protected ArrayList<PostData> doInBackground(String... params) {
// TODO Auto-generated method stub
String urlStr = params[0];
InputStream is = null;
ArrayList<PostData> postDataList = new ArrayList<PostData>();
try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setReadTimeout(10 * 1000);
connection.setConnectTimeout(10 * 1000);
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
int response = connection.getResponseCode();
Log.d("debug", "The response is: " + response);
is = connection.getInputStream();
14. // parse xml
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(is, null);
int eventType = xpp.getEventType();
PostData pdData = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE, DD MMM yyyy HH:mm:ss", Locale.US);
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
} else if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals("item")) {
pdData = new PostData();
currentTag = RSSXMLTag.IGNORETAG;
} else if (xpp.getName().equals("title")) {
currentTag = RSSXMLTag.TITLE;
} else if (xpp.getName().equals("link")) {
currentTag = RSSXMLTag.LINK;
} else if (xpp.getName().equals("pubDate"))
{
currentTag = RSSXMLTag.DATE;
} else if (xpp.getName().equals("encoded"))
{
currentTag = RSSXMLTag.CONTENT;
} else if (xpp.getName().equals("guid")) {
currentTag = RSSXMLTag.GUID;
}
} else if (eventType == XmlPullParser.END_TAG) {
if (xpp.getName().equals("item")) {
// format data disini
// dan lainnya pada adapter
Date postDate = dateFormat.parse(pdData.postDate);
pdData.postDate = dateFormat.format(postDate);
postDataList.add(pdData);
} else {
currentTag = RSSXMLTag.IGNORETAG;
}
} else if (eventType == XmlPullParser.TEXT) {
String content = xpp.getText();
content = content.trim();
if (pdData != null) {
switch (currentTag) {
case TITLE:
if (content.length() != 0) {
if (pdData.postTitle != null) {
pdData.postTitle += content;
else {
pdData.postTitle = content;
}
}b
reak;
case LINK:
15. if (content.length() != 0) {
if (pdData.postLink != null) {
pdData.postLink += content;
else {
pdData.postLink = content;
}
}b
reak;
case DATE:
if (content.length() != 0) {
if (pdData.postDate != null) {
pdData.postDate += content;
else {
pdData.postDate = content;
}
}b
reak;
case CONTENT:
if (content.length() != 0) {
if (pdData.postContent != null) {
pdData.postContent += content;
else {
pdData.postContent = content;
}
}b
reak;
case GUID:
if (content.length() != 0) {
if (pdData.postGuid != null) {
pdData.postGuid += content;
else {
pdData.postGuid = content;
}
}b
reak;
default:
break;
}
}
}
eventType = xpp.next();
}
Log.v("tst", String.valueOf((postDataList.size())));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
16. return postDataList;
}
@Override
protected void onPostExecute(ArrayList<PostData> result) {
// TODO Auto-generated method stub
boolean isupdated = false;
for (int i = 0; i < result.size(); i++) {
//cek apakah post telah ada pada list
if (guidList.contains(result.get(i).postGuid)) {
continue;
} else {
isupdated = true;
guidList.add(result.get(i).postGuid);
}
if (isRefreshLoading) {
listData.add(i, result.get(i));
} else {
listData.add(result.get(i));
}
}
if (isupdated) {
postAdapter.notifyDataSetChanged();
}
isLoading = false;
if (isRefreshLoading) {
postListView.onRefreshComplete();
} else {
postListView.onLoadingMoreComplete();
}
super.onPostExecute(result);
}
}
Untuk kelengkapan kodenya bisa di cek pada source code yang
disediakan.
Setelah listview selesai seharusnya kita melanjutkan pada
pembahasan content, namun ada tidak langsung kesana karena ada
fitur tersembunyi yang perlu dijelaskan disini ya itu adalah
fitur refresh untuk memuat ulang dan mengambil data yang belum
tersedia pada device dari server, dalam fitur refresh salah
satunya yang dipakai untuk aplikasi ini adalah drag refresh,
dimana permintaan refresh akan dilakukan dengan drag (menarik)
layar ke arah bawah.
Pertamatama,
kita akan menginisialisasi tampilan judul dalam
constructor. Pada tampilan header, ada gambar panah, progress
bar dan dua kotak teks. Seperti gambar dibawah.
19. ;
headerRelativeLayout.setPadding(0, -1 * HEADER_HEIGHT, 0, 0);
this.addHeaderView(headerRelativeLayout, null, false);
}
Dalam metode fungsi onTouchEvent, bisamenangani interaksi
pengguna, seperti sentuhan, tarik ke bawah, dan lepaskan. Bisa
dilihat dalam tiga MotionEvent diantaranya Setelah pengguna
menyentuh layar, event ACTION_DOWN trigger. Dalam keadaan ini,
dimulai untuk merecord titik awal dari mana pengguna mulai
menarik ListView, Kemudian ketika pengguna sedang menarik
ListView, event ACTION_MOVE trigger. Dalam keadaan ini, akan
mengubah header tampilan atas untuk menunjukkan indikator
refresh selanjutnya setelah pengguna event ACTION_UP trigger.
Akan memeriksa header dari tampilan judul dan mengeksekusi
perintah apakah menjalankan fungsi refresh atau tidak.
Contoh sederhanya berikut:
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//jikaDidrag = true;
startY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
if (!isLoading) {
deltaY = ev.getY() - startY;
Log.d("debug", String.valueOf(deltaY));
headerRelativeLayout.setPadding(
headerRelativeLayout.getPaddingLeft(), -1
* HEADER_HEIGHT + (int) deltaY, 0,
headerRelativeLayout.getPaddingBottom());
20. if(headerRelativeLayout.getPaddingTop() >= HEADER_HEIGHT && currentState ==
STATE_PULL_TO_REFRESH) {
//rubah state
currentState = STATE_RELEASE_TO_UPDATE;
arrowImage.clearAnimation();
arrowImage.startAnimation(rotateAnimation);
headerTextView.setText(R.string.release_to_refresh);
} else if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT
&& currentState == STATE_RELEASE_TO_UPDATE) {
currentState = STATE_PULL_TO_REFRESH;
arrowImage.clearAnimation();
arrowImage.startAnimation(reverseRotateAnimation);
headerTextView.setText(R.string.pull_to_refresh);
}
}
break;
case MotionEvent.ACTION_UP:
//jikaDiDrag = false;
if (!isLoading) {
if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT) {
// kembali
headerRelativeLayout.setPadding(
headerRelativeLayout.getPaddingLeft(), -1
* HEADER_HEIGHT, 0,
headerRelativeLayout.getPaddingBottom());
} else {
// maka masuk pada HEADER_HEIGHT dan mulai berjalan
headerRelativeLayout.setPadding(
headerRelativeLayout.getPaddingLeft(),
HEADER_TOP, 0,
21. headerRelativeLayout.getPaddingBottom());
headerTextView.setText(R.string.loading);
progressBar.setVisibility(View.VISIBLE);
arrowImage.clearAnimation();
arrowImage.setVisibility(View.GONE);
isLoading = true; //mulai loading
if (refreshDelegate != null) {
refreshDelegate.startFresh();
}
}
}
break;
default:
break;
}
return super.onTouchEvent(ev);
}
Selain header juga ada footer yang berfungsi untuk mengirim
permintaan data pada server namun tidak seperti di header yang
selalu meminta data baru di server melainkan data lama yang
belum tersedia di listview dan ketika field tesebut di klik
maka akan meload data postingan lama/sebelumnya.
Pembahasan terakhir adalah webview, dimana saat kita memilih
salah satu artikel yang terdapat pada listview maka selanjutnya
system akan membawa anda tidak langsung menuju browser,
melainkan tetap berjalan dalam aplikasi. Hal ini bisa dilakukan
dengan menerapkan metode webview.
22. Hal tersebut dilakukan dengan menyisipkan OnItemClickListener
pada list item artikel,
postListView.setOnItemClickListener(onItemClickListener);
Dan selanjutnya adalah interface untuk merespon dan menangani
perintah tersebut, lebih jelasnya berikut:
private OnItemClickListener onItemClickListener = new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
23. PostData data = listData.get(arg2 - 1);
Bundle postInfo = new Bundle();
postInfo.putString("content", data.postContent);
Intent postviewIntent = new Intent(MainActivity.this,
LihatPost.class);
postviewIntent.putExtras(postInfo);
startActivity(postviewIntent);
}
};
Diatas bisa dilihat penerapan Onclick listener pada item di
listview. Kemudian, kita instantiate Activity Intent baru dan
meneruskan data ke activity dengan Bundle. Selanjutnya panggil
startActivity untuk beralih ke Activity baru yaitu
LihatPost.java dimana activity tersebut adalah class untuk
menampilkan webview berikut kodenya:
package id.creatorb.muslimnews.activity;
import id.creatorb.muslimnews.R;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class LihatPost extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.postview);
Bundle bundle = this.getIntent().getExtras();
String postContent = bundle.getString("content");
webView = (WebView)this.findViewById(R.id.webview);
webView.loadData(postContent, "text/html; charset=utf-8","utf-8");
}
}
Perhatikan kode diatas, kita mendapat data dari Bundle yang
dilalui oleh activity sebelumnya. Setelah mendapatkan parsing
RSS nya maka dengan web view load data ini lah yang membuat
kita bisa menampilkan pada layout content dengan format
text/html.
24. For more tutorials you can subscribe me.
RSS Feed tut's : https://www.youtube.com/watch?v=YGsNAyafHI0
creatorb