Android - โปรแกรมอ่าน RSS

RSS ย่อมาจาก Really Simple Syndication RSS เป็นวิธีง่ายๆในการแบ่งปันการอัปเดตเว็บไซต์และเนื้อหากับผู้ใช้ของคุณเพื่อให้ผู้ใช้ไม่ต้องเข้าชมเว็บไซต์ของคุณทุกวันเพื่อรับการอัปเดตประเภทใด ๆ

RSS ตัวอย่าง

RSS เป็นเอกสารที่สร้างขึ้นโดยเว็บไซต์ที่มีนามสกุล. xml คุณสามารถแยกวิเคราะห์เอกสารนี้และแสดงให้ผู้ใช้เห็นในแอปพลิเคชันของคุณได้อย่างง่ายดาย เอกสาร RSS มีลักษณะดังนี้

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

องค์ประกอบ RSS

เอกสาร RSS ดังกล่าวข้างต้นมีองค์ประกอบดังต่อไปนี้

ซีเนียร์ No ส่วนประกอบและคำอธิบาย
1

channel

องค์ประกอบนี้ใช้เพื่ออธิบายฟีด RSS

2

title

กำหนดชื่อของช่อง

3

link

กำหนดไฮเปอร์ลิงก์ไปยังแชนเนล

4

description

อธิบายช่อง

การแยกวิเคราะห์ RSS

การแยกวิเคราะห์เอกสาร RSS เป็นเหมือนการแยกวิเคราะห์ XML ตอนนี้เรามาดูวิธีการแยกวิเคราะห์เอกสาร XML

สำหรับสิ่งนี้เราจะสร้างอ็อบเจ็กต์ XMLPullParser แต่ในการสร้างนั้นเราจะสร้างอ็อบเจ็กต์ XmlPullParserFactory ก่อนจากนั้นเรียกใช้เมธอด newPullParser () เพื่อสร้าง XMLPullParser ไวยากรณ์ได้รับด้านล่าง -

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

ขั้นตอนต่อไปเกี่ยวข้องกับการระบุไฟล์สำหรับ XmlPullParser ที่มี XML อาจเป็นไฟล์หรืออาจเป็นสตรีมก็ได้ ในกรณีของเรามันเป็นสตรีมไวยากรณ์ของมันได้รับด้านล่าง -

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ส่งคืนประเภทของเหตุการณ์ที่เกิดขึ้น เช่นการเริ่มต้นเอกสารการเริ่มแท็กเป็นต้นวิธีการgetName ส่งคืนชื่อของแท็กและเนื่องจากเราสนใจเฉพาะอุณหภูมิดังนั้นเราจึงตรวจสอบคำสั่งเงื่อนไขว่าถ้าเรามีแท็กอุณหภูมิเราจึงเรียกเมธอด getAttributeValue เพื่อคืนค่าแท็กอุณหภูมิให้เรา

นอกเหนือจากวิธีการเหล่านี้แล้วยังมีวิธีการอื่น ๆ ที่จัดเตรียมโดยคลาสนี้สำหรับการแยกวิเคราะห์ไฟล์ XML ที่ดีขึ้น วิธีการเหล่านี้แสดงไว้ด้านล่าง -

ซีเนียร์ No วิธีการและคำอธิบาย
1

getAttributeCount()

วิธีนี้จะส่งคืนจำนวนแอตทริบิวต์ของแท็กเริ่มต้นปัจจุบัน

2

getAttributeName(int index)

วิธีนี้ส่งคืนชื่อของแอตทริบิวต์ที่ระบุโดยค่าดัชนี

3

getColumnNumber()

วิธีนี้จะคืนค่าส่งกลับหมายเลขคอลัมน์ปัจจุบันโดยเริ่มจาก 0

4

getDepth()

วิธีนี้คืนค่าส่งกลับความลึกปัจจุบันขององค์ประกอบ

5

getLineNumber()

ส่งคืนหมายเลขบรรทัดปัจจุบันโดยเริ่มจาก 1

6

getNamespace()

วิธีนี้จะคืนค่า URI พื้นที่ชื่อขององค์ประกอบปัจจุบัน

7

getPrefix()

วิธีนี้ส่งกลับคำนำหน้าขององค์ประกอบปัจจุบัน

8

getName()

วิธีนี้จะส่งคืนชื่อของแท็ก

9

getText()

วิธีนี้จะส่งคืนข้อความสำหรับองค์ประกอบนั้น ๆ

10

isWhitespace()

วิธีนี้ตรวจสอบว่าเหตุการณ์ TEXT ปัจจุบันมีเฉพาะอักขระช่องว่างหรือไม่

ตัวอย่าง

นี่คือตัวอย่างที่สาธิตการใช้คลาส XMLPullParser สร้างแอปพลิเคชันการแยกวิเคราะห์พื้นฐานที่ช่วยให้คุณสามารถแยกวิเคราะห์เอกสาร RSS ที่มีอยู่ที่/android/sampleXML.xmlจากนั้นจึงแสดงผลลัพธ์

ในการทดลองกับตัวอย่างนี้คุณสามารถเรียกใช้สิ่งนี้บนอุปกรณ์จริงหรือในโปรแกรมจำลอง

ขั้นตอน คำอธิบาย
1 คุณจะใช้ Android studio เพื่อสร้างแอปพลิเคชัน Android ภายใต้แพ็คเกจ com.example.sairamkrishna.myapplication
2 แก้ไขไฟล์ src / MainActivity.java เพื่อเพิ่มโค้ดที่จำเป็น
3 แก้ไข res / layout / activity_main เพื่อเพิ่มคอมโพเนนต์ XML ที่เกี่ยวข้อง
4 สร้างไฟล์ java ใหม่ภายใต้ src / HandleXML.java เพื่อดึงข้อมูลและแยกวิเคราะห์ข้อมูล XML
5 สร้างไฟล์ java ใหม่ภายใต้ src / second.java เพื่อแสดงผลลัพธ์ของ XML
5 แก้ไข AndroidManifest.xml เพื่อเพิ่มสิทธิ์อินเทอร์เน็ตที่จำเป็น
6 เรียกใช้แอปพลิเคชันและเลือกอุปกรณ์ Android ที่ใช้งานอยู่และติดตั้งแอปพลิเคชันบนแอปพลิเคชันและตรวจสอบผลลัพธ์

ต่อไปนี้เป็นเนื้อหาของไฟล์กิจกรรมหลักที่แก้ไข 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);
         }
      });
   }

}

ต่อไปนี้เป็นเนื้อหาของไฟล์ java 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(); 
   }
}

สร้างไฟล์และตั้งชื่อเป็นไฟล์ second.java ภายใต้ไดเร็กทอรี 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");
   }
}

สร้างไฟล์ xml ที่ 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>

แก้ไขเนื้อหาของ res/layout/activity_main.xml ดังต่อไปนี้ -

<?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>

แก้ไขไฟล์ res/values/string.xml ดังต่อไปนี้

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

นี่คือค่าเริ่มต้น 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>

มาลองเรียกใช้แอปพลิเคชันของคุณ ฉันถือว่าคุณได้สร้างไฟล์AVDในขณะที่ทำการตั้งค่าสภาพแวดล้อม ในการเรียกใช้แอปจาก Android studio ให้เปิดไฟล์กิจกรรมของโครงการแล้วคลิก

ไอคอนเรียกใช้จากแถบเครื่องมือ Android studio ติดตั้งแอปบน AVD ของคุณและเริ่มใช้งานและหากทุกอย่างเรียบร้อยดีกับการตั้งค่าและแอปพลิเคชันของคุณแอปจะแสดงตามหน้าต่าง Emulator -

เพียงกดปุ่มดึงข้อมูลเพื่อดึงข้อมูล RSS หลังจากกดหน้าจอต่อไปนี้จะปรากฏขึ้นซึ่งจะแสดงข้อมูล RSS

เพียงกดปุ่มผลลัพธ์เพื่อดู XML ซึ่งวางไว้ที่ http://tutorialspoint.com/android/sampleXML.xml