Android - Pembaca RSS

RSS adalah singkatan dari Really Simple Syndication. RSS adalah cara mudah untuk berbagi pembaruan dan konten situs web Anda dengan pengguna sehingga pengguna tidak perlu mengunjungi situs Anda setiap hari untuk pembaruan apa pun.

Contoh RSS

RSS adalah dokumen yang dibuat oleh situs web dengan ekstensi .xml. Anda dapat dengan mudah mengurai dokumen ini dan menampilkannya kepada pengguna di aplikasi Anda. Dokumen RSS terlihat seperti ini.

<rss version="2.0">
   <channel>
      <title>Sample RSS</title>
      <link>http://www.google.com</link>
      <description>World's best search engine</description>
   </channel>
</rss>

Elemen RSS

Dokumen RSS seperti di atas memiliki elemen berikut.

Sr Tidak Deskripsi komponen
1

channel

Elemen ini digunakan untuk mendeskripsikan RSS feed

2

title

Mendefinisikan judul saluran

3

link

Mendefinisikan hyper link ke saluran

4

description

Menjelaskan saluran

Mengurai RSS

Mengurai dokumen RSS lebih seperti mengurai XML. Jadi sekarang mari kita lihat bagaimana mengurai dokumen XML.

Untuk ini, Kita akan membuat objek XMLPullParser, tetapi untuk membuatnya, pertama-tama kita akan membuat objek XmlPullParserFactory dan kemudian memanggil metode newPullParser () untuk membuat XMLPullParser. Sintaksnya diberikan di bawah ini -

private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();

Langkah selanjutnya melibatkan menentukan file untuk XmlPullParser yang berisi XML. Ini bisa berupa file atau bisa menjadi Stream. Dalam kasus kami ini adalah aliran. Sintaksnya diberikan di bawah ini -

myparser.setInput(stream, null);

Langkah terakhir adalah mengurai XML. File XML terdiri dari event, Name, Text, AttributesValue dll. Jadi XMLPullParser memiliki fungsi terpisah untuk mem-parsing setiap komponen file XML. Sintaksnya diberikan di bawah ini -

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(); 					
}

Metode getEventTypemengembalikan jenis peristiwa yang terjadi. misal: Dokumen mulai, awal tag, dll. MetodegetName mengembalikan nama tag dan karena kami hanya tertarik pada suhu, jadi kami hanya memeriksa pernyataan bersyarat bahwa jika kami mendapat tag suhu, kami memanggil metode getAttributeValue untuk mengembalikan nilai tag suhu.

Terlepas dari metode ini, ada metode lain yang disediakan oleh kelas ini untuk penguraian file XML yang lebih baik. Metode ini tercantum di bawah -

Sr Tidak Metode & deskripsi
1

getAttributeCount()

Metode ini hanya Mengembalikan jumlah atribut dari tag awal saat ini.

2

getAttributeName(int index)

Metode ini mengembalikan nama atribut yang ditentukan oleh nilai indeks.

3

getColumnNumber()

Metode ini mengembalikan Mengembalikan nomor kolom saat ini, mulai dari 0.

4

getDepth()

Metode ini mengembalikan Mengembalikan kedalaman elemen saat ini.

5

getLineNumber()

Mengembalikan nomor baris saat ini, mulai dari 1.

6

getNamespace()

Metode ini mengembalikan URI ruang nama dari elemen saat ini.

7

getPrefix()

Metode ini mengembalikan awalan elemen saat ini.

8

getName()

Metode ini mengembalikan nama tag.

9

getText()

Metode ini mengembalikan teks untuk elemen tertentu itu.

10

isWhitespace()

Metode ini memeriksa apakah acara TEXT saat ini hanya berisi karakter spasi.

Contoh

Berikut adalah contoh yang mendemonstrasikan penggunaan kelas XMLPullParser. Ini membuat aplikasi Parsing dasar yang memungkinkan Anda untuk mengurai dokumen RSS yang ada di sini di /android/sampleXML.xml dan kemudian menampilkan hasilnya.

Untuk bereksperimen dengan contoh ini, Anda dapat menjalankannya di perangkat sebenarnya atau di emulator.

Langkah Deskripsi
1 Anda akan menggunakan Android studio untuk membuat aplikasi Android di bawah paket com.example.sairamkrishna.myapplication.
2 Ubah file src / MainActivity.java untuk menambahkan kode yang diperlukan.
3 Ubah res / layout / activity_main untuk menambahkan komponen XML masing-masing.
4 Buat file java baru di bawah src / HandleXML.java untuk mengambil dan mengurai data XML.
5 Buat file java baru di bawah src / second.java untuk menampilkan hasil XML
5 Ubah AndroidManifest.xml untuk menambahkan izin internet yang diperlukan.
6 Jalankan aplikasi dan pilih perangkat android yang sedang berjalan dan instal aplikasi di atasnya dan verifikasi hasilnya.

Berikut adalah konten file aktivitas utama yang dimodifikasi src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity {
   EditText title,link,description;
   Button b1,b2;
   private String finalUrl="http://tutorialspoint.com/android/sampleXML.xml";
   private HandleXML obj;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      title = (EditText) findViewById(R.id.editText);
      link = (EditText) findViewById(R.id.editText2);
      description = (EditText) findViewById(R.id.editText3);

      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            obj = new HandleXML(finalUrl);
            obj.fetchXML();

            while(obj.parsingComplete);
            title.setText(obj.getTitle());
            link.setText(obj.getLink());
            description.setText(obj.getDescription());
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent in=new Intent(MainActivity.this,second.class);
            startActivity(in);
         }
      });
   }

}

Berikut adalah isi dari file java tersebut src/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(); 
   }
}

Buat file dan beri nama sebagai file second.java di bawah direktori java/second.java

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class second extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.second_activity);
      WebView w1=(WebView)findViewById(R.id.webView);
      w1.loadUrl("http://tutorialspoint.com/android/sampleXML.xml");
   }
}

Buat file xml di res/layout/second_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">
   
   <WebView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/webView"
      android:layout_gravity="center_horizontal" />
</LinearLayout>

Ubah konten res/layout/activity_main.xml ke berikut -

<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="RSS example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageView"
      android:hint="Tittle"
      android:textColorHint="#ff69ff0e"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="#ff21ff11"
      android:hint="Link"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText3"
      android:layout_below="@+id/editText2"
      android:layout_alignLeft="@+id/editText2"
      android:layout_alignStart="@+id/editText2"
      android:hint="Description"
      android:textColorHint="#ff33ff20"
      android:layout_alignRight="@+id/editText2"
      android:layout_alignEnd="@+id/editText2" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Fetch"
      android:id="@+id/button"
      android:layout_below="@+id/editText3"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_toLeftOf="@+id/imageView"
      android:layout_toStartOf="@+id/imageView" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Result"
      android:id="@+id/button2"
      android:layout_alignTop="@+id/button"
      android:layout_alignRight="@+id/editText3"
      android:layout_alignEnd="@+id/editText3" />

</RelativeLayout>

Ubah res/values/string.xml berikut ini

<resources>
   <string name="app_name">My Application</string>
</resources>

Ini adalah defaultnya AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <uses-permission android:name="android.permission.INTERNET"/>
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         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=".second"></activity>
   </application>
</manifest>

Mari coba jalankan aplikasi Anda. Saya berasumsi bahwa Anda telah membuat fileAVDsaat melakukan pengaturan lingkungan. Untuk menjalankan aplikasi dari Android studio, buka salah satu file aktivitas proyek Anda dan klik

ikon Run dari toolbar. Android studio menginstal aplikasi pada AVD Anda dan memulainya dan jika semuanya baik-baik saja dengan pengaturan dan aplikasi Anda, itu akan muncul di jendela Emulator berikut -

Cukup tekan tombol Fetch Feed untuk mengambil RSS feed. Setelah menekan, akan muncul layar berikut yang menampilkan data RSS.

Cukup tekan tombol hasil untuk melihat XML, yang ditempatkan di http://tutorialspoint.com/android/sampleXML.xml