مشخصات مقاله
-
2052
-
0.0
-
9428
-
0
-
0
آموزش RSS خوان اندروید
آموزش RSS Reader در اندروید
RSS مخفف Really Simple Syndication ( به معنای متحدسازی واقعا آسان) می باشد. RSS راهیساده برایبه اشتراک گذاشتن آپدیت ها و محتوای وب سایت شما با یوزرهای شما می باشد، طوریکه یوزرها مجبور نباشند برای هر آپدیتی، روزانه سایت شما را مشاهده کنند.
مثال از Rss Reader
RSS داکیومنتی می باشد که توسط وب سایت با توسعه ی xml ایجاد می شود. می توانید به راحتی این داکیومنت را تجزیه کرده و آن را در برنامه ی خود به یوزر نمایش دهید. یک داکیومنت RSS مانند زیر می باشد.
Sample RSS http://www.google.com World's best search engine
عناصر RSSReader
یک داکیومنت RSS مانند آنچه در بالا دیدید، دارای عناصر زیر می باشد.
تجزیه ی RSS
تجزیه ی داکیومنت RSS بیشتر شبیه به تجزیه xml می باشد. اکنون اجازه هید نگاهی به چگونگی تجزیه ی داکیومنت XML داشته باشیم.
برای انجام این کار یک آبجکت XMLPullParser ایجاد خواهیم کرد، اما برای ایجاد آن نیز ابتدا آبجکت XmlPullParserFactory را ایجاد می کنیم و سپس روش newPullParser() را برای ایجاد XMLPullParser فرا می خوانیم. ترکیب آن مانند زیر می باشد.
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();
گام بعدی شامل مشخص کردن فایل دارای XML برای XmlPullParser می باشد، که می تواند یک فایل یا یک جریان باشد. در مورد ما یک جریان است و ترکیب آن نیز در زیر ارائه شده است.
myparser.setInput(stream, null);
و آخرین گام تجزیه ی XML می باشد. یک فایل xml شامل رویدادها، نام، متن، AttributesValue و غیره می باشد. بنابراین XMLPullParser دارای یک عملکرد مجزا برای تجزیه ی هرکدام از مولفه های فایل xml است. ترکیب آن مانند زیر می باشد.
int event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT)
{
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.END_TAG:
if(name.equals("temperature")){
temperature = myParser.getAttributeValue(null,"value");
}
break;
}
event = myParser.next();
}
روش getEventType نوع رویدادی را که اتفاق می افتد، گزارش می دهد. به عنوان مثال آغاز Document، آغاز tag و غیره. روش getName نام برچسب را گزارش می دهد و از آنجایی که ما فقط غلاقمند به دما هستیم، بنابراین فقط در وضعیت مشروط چک می کنیم که اگر برچسب دما گرفتیم، روش getAttributeValue را فرا بخوانیم تا مقدار مربوط به برچسب دما را به ما گزارش دهد.
علاوه بر این روش ها، روش های دیگری توسط این گروه برای تجزیه ی بهتر فایل های xml ارائه می شوند. این روش ها در جدول زیر ارائه شده اند.
مثال:
این مثال استفاده ی افقی از دیالوگ پیشروی را نشان می دهد که در واقع یک نوار پیشروی می باشد. این مثال یک موار پیشروی بر اساس فشار دکمه نشان می دهد.
برای انجام مثال لازم است آن را روی یک دستگاه حقیقی پس از توسعه ی برنامه، اجرا کنید، طبق مراحل زیر
مثال:
این مثال استفاده از گروه XMLPullParser را توضیح می دهد. این مثال یک برنامه ی تجزیه ی پایه ایجاد می کند که به شما اجازه می دهد تا یک داکیومنت RSS را که می توانید در http://tahlildadeh.com/
پیدا کنید، تجزیه کنید و پس از آن نتایج را نشان می دهد.
برای آزمایش این مثال می توانید آن را روی یک دستگاه حقیقی یا یک مقلد اجرا کنید.
در اینجا محتوای فایل تغییر یافته فعالیت اصلی را مشاهده می کنید.
src/com.example.rssreader/MainActivity.java.
package com.example.rssreader;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
private String finalUrl="http://tutorialspoint.com/android/sampleXML.xml";
private HandleXML obj;
private EditText title,link,description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
title = (EditText)findViewById(R.id.editText1);
link = (EditText)findViewById(R.id.editText2);
description = (EditText)findViewById(R.id.editText3);
}
@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;
}
public void fetch(View view){
obj = new HandleXML(finalUrl);
obj.fetchXML();
while(obj.parsingComplete);
title.setText(obj.getTitle());
link.setText(obj.getLink());
description.setText(obj.getDescription());
}
}
در ادامه محتوای فایل جاوا src/com.example.rssreader/HandleXML.java را مشاهده می کنید.
package com.example.rssreader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.util.Log;
public class HandleXML {
private String title = "title";
private String link = "link";
private String description = "description";
private String urlString = null;
private XmlPullParserFactory xmlFactoryObject;
public volatile boolean parsingComplete = true;
public HandleXML(String url){
this.urlString = url;
}
public String getTitle(){
return title;
}
public String getLink(){
return link;
}
public String getDescription(){
return description;
}
public void parseXMLAndStoreIt(XmlPullParser myParser) {
int event;
String text=null;
try {
event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = myParser.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("title")){
title = text;
}
else if(name.equals("link")){
link = text;
}
else if(name.equals("description")){
description = text;
}
else{
}
break;
}
event = myParser.next();
}
parsingComplete = false;
} catch (Exception e) {
e.printStackTrace();
}
}
public void fetchXML(){
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
InputStream stream = conn.getInputStream();
xmlFactoryObject = XmlPullParserFactory.newInstance();
XmlPullParser myparser = xmlFactoryObject.newPullParser();
myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
myparser.setInput(stream, null);
parseXMLAndStoreIt(myparser);
stream.close();
} catch (Exception e) {
}
}
});
thread.start();
}
}
محتوای res/layout/activity_main.xml را مانند زیر تغییر دهید.
res/values/string.xml را مانند زیر تغییر دهید.
RSSReader Settings Sample RSS Reader title link Description Fetch Feed
این پیش فرض AndroidManifest.xml می باشد.
اجازه دهید برنامه ی RSSReader تازه تغییریافته را اجرا کنیم.فرض می کنیم که شما در هنگام انجام تنظیمان محیط AVD خود را ایجاد کرده اید. برای اجرای برنامه از Eclipse، یکی از فایل های فعالیت برنامه را باز کرده و روی آیکن icon در تولبار کلیک کنید. Eclipse برنامه را روی AVD نصب کرده و آن را شروع می کند. اگر همه چیز در مورد برنامه و تنظیمات آن درست باشد، پنجره ی مقلد زیر نمایش داده خواهد شد.
اکنون روی دکمه ی Fetch Feed بزنید تا RSS feed را بیاورید، پس از آن صفحه ی زیر نمایش داده خواهد شد که داده ی RSS را نمایش می دهد.