کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش 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 مانند آنچه در بالا دیدید، دارای عناصر زیر می باشد.

عناصر
ردیف
channel این عنصر برای توصیف تغذیه ی RSS استفاده می شود.
1
title عنوان کانال را تعریف می کند.
2
link یک هایپرلینک برای کانال تعریف می کند.
3
description کانال را توصیف می کند.
4

تجزیه ی 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 ارائه می شوند. این روش ها در جدول زیر ارائه شده اند.

موضوعات و توضیحات
ردیف
getMax() این روش بیشترین مقدار یک پیشروی را گزارش می دهد.
1
incrementProgressBy(int diff) این روش پیشرویbar توسط مقادیر مختلف، که به عنوان پارامتر عبور کرده اند، افزایش می دهد.
2
setIndeterminate(boolean indeterminate) این روش نشانگر پیشروی را به عنوان معین یا نامعین، تنظیم می کند.
3
setMax(int max) این روش بیشترین مقدار یک دیالوگ پیشروی را تنظیم می کند.
4
setProgress(int value) این روش برای آپدیت دیالوگ پیشروی با چند مقدار مشخص، استفاده می شود.
5
show(Context context, CharSequence title, CharSequence message) این روش یک روش استاتیک می باشد که برای نمایش دیالوگ پیشروی استفاده می شود.
6

مثال:

این مثال استفاده ی افقی از دیالوگ پیشروی را نشان می دهد که در واقع یک نوار پیشروی می باشد. این مثال یک موار پیشروی بر اساس فشار دکمه نشان می دهد.

برای انجام مثال لازم است آن را روی یک دستگاه حقیقی پس از توسعه ی برنامه، اجرا کنید، طبق مراحل زیر

توضیحات
مراحل
getAttributeCount() این روش فقط تعداد ویژگی های start tag کنونی را گزارش می دهد.
1
getAttributeName(int index) این روش نام ویژگی های مشخص شده توسط شاخص مقدار را گزارش می دهد.
2
getColumnNumber() این روش گزارش های شماره ی ستون کنونی (شروع از 0) را گزارش می دهد.
3
getDepth() این روش بازگشت های عمق کنونی عنصر را گزارش می دهد.
4
getLineNumber() شماره ی خط کنونی را، شروع از 1، گزارش می دهد.
5
getNamespace() این روش فضانام URI مربوط به عنصر کنونی را گزارش می دهد.
6
getPrefix() این روش پیشوند عنصر کنونی را گزارش می دهد.
7
getName() این روش نام برچسب را گزارش می دهد.
8
getText() این روش متن مربوط به عنصر خاص را گزارش می دهد.
9
isWhitespace() این روش چک می کند که آیا رویداد TEXT کنونی فقط شامل کاراکترهای فضای سفید می شوند.
10

مثال:

این مثال استفاده از گروه XMLPullParser را توضیح می دهد. این مثال یک برنامه ی تجزیه ی پایه ایجاد می کند که به شما اجازه می دهد تا یک داکیومنت RSS را که می توانید در http://tahlildadeh.com/

پیدا کنید، تجزیه کنید و پس از آن نتایج را نشان می دهد.

برای آزمایش این مثال می توانید آن را روی یک دستگاه حقیقی یا یک مقلد اجرا کنید.

توضیحات
مراحل
برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان RSSReader تحت بسته ی com.example.rssreader نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.
1
فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.
2
res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.
3
res/values/string.xml را برای افزودن مولفه های رشته ی لازم تغییر دهید.
4
یک فایل جاوای جدید تحت src/HandleXML.java برای تجزیه ی داده ی XML، ایجاد کنید.
5
AndroidManifest.xml را برای افزودن اجازه ی اینترنت لازم تغییر دهید.
6
برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.
7

در اینجا محتوای فایل تغییر یافته فعالیت اصلی را مشاهده می کنید.

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 نصب کرده و آن را شروع می کند. اگر همه چیز در مورد برنامه و تنظیمات آن درست باشد، پنجره ی مقلد زیر نمایش داده خواهد شد.

آموزش RSS Reader در اندروید

اکنون روی دکمه ی Fetch Feed بزنید تا RSS feed را بیاورید، پس از آن صفحه ی زیر نمایش داده خواهد شد که داده ی RSS را نمایش می دهد.

آموزش RSS Reader در اندروید
1394/07/27 9428 2052
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...