Android - Trình đọc RSS

RSS là viết tắt của Really Simple Syndication. RSS là một cách dễ dàng để chia sẻ nội dung và cập nhật trang web của bạn với người dùng để người dùng có thể không phải truy cập trang web của bạn hàng ngày để xem bất kỳ loại cập nhật nào.

Ví dụ RSS

RSS là một tài liệu được tạo bởi trang web với phần mở rộng .xml. Bạn có thể dễ dàng phân tích cú pháp tài liệu này và hiển thị nó cho người dùng trong ứng dụng của bạn. Một tài liệu RSS trông như thế này.

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

Phần tử RSS

Một tài liệu RSS như trên có các yếu tố sau.

Sr.No Thành phần & mô tả
1

channel

Phần tử này được sử dụng để mô tả nguồn cấp dữ liệu RSS

2

title

Xác định tiêu đề của kênh

3

link

Xác định liên kết siêu tới kênh

4

description

Mô tả kênh

Phân tích cú pháp RSS

Phân tích cú pháp một tài liệu RSS giống như phân tích cú pháp XML. Vì vậy, bây giờ chúng ta hãy xem cách phân tích cú pháp một tài liệu XML.

Đối với điều này, Chúng tôi sẽ tạo đối tượng XMLPullParser, nhưng để tạo đối tượng đó, trước tiên chúng tôi sẽ tạo đối tượng XmlPullParserFactory và sau đó gọi phương thức newPullParser () của nó để tạo XMLPullParser. Cú pháp của nó được đưa ra dưới đây:

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

Bước tiếp theo liên quan đến việc chỉ định tệp cho XmlPullParser có chứa XML. Nó có thể là một tệp hoặc có thể là một Luồng. Trong trường hợp của chúng tôi, nó là một luồng, cú pháp của nó được đưa ra dưới đây:

myparser.setInput(stream, null);

Bước cuối cùng là phân tích cú pháp XML. Một tệp XML bao gồm các sự kiện, Tên, Văn bản, Thuộc tính, Giá trị, v.v ... Vì vậy, XMLPullParser có một chức năng riêng để phân tích cú pháp từng thành phần của tệp XML. Cú pháp của nó được đưa ra dưới đây:

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

Phương pháp getEventTypetrả về loại sự kiện xảy ra. ví dụ: Bắt đầu tài liệu, bắt đầu thẻ, v.v. Phương phápgetName trả về tên của thẻ và vì chúng tôi chỉ quan tâm đến nhiệt độ, vì vậy chúng tôi chỉ cần kiểm tra trong câu lệnh điều kiện rằng nếu chúng tôi có thẻ nhiệt độ, chúng tôi gọi phương thức getAttributeValue để trả lại cho chúng tôi giá trị của thẻ nhiệt độ.

Ngoài các phương thức này, lớp này còn cung cấp các phương thức khác để phân tích cú pháp tệp XML tốt hơn. Các phương pháp này được liệt kê bên dưới -

Sr.No Phương pháp & mô tả
1

getAttributeCount()

Phương thức này chỉ Trả về số thuộc tính của thẻ bắt đầu hiện tại.

2

getAttributeName(int index)

Phương thức này trả về tên của thuộc tính được chỉ định bởi giá trị chỉ mục.

3

getColumnNumber()

Phương thức này trả về Trả về số cột hiện tại, bắt đầu từ 0.

4

getDepth()

Phương thức này trả về Trả về độ sâu hiện tại của phần tử.

5

getLineNumber()

Trả về số dòng hiện tại, bắt đầu từ 1.

6

getNamespace()

Phương thức này trả về URI không gian tên của phần tử hiện tại.

7

getPrefix()

Phương thức này trả về tiền tố của phần tử hiện tại.

số 8

getName()

Phương thức này trả về tên của thẻ.

9

getText()

Phương thức này trả về văn bản cho phần tử cụ thể đó.

10

isWhitespace()

Phương pháp này kiểm tra xem sự kiện TEXT hiện tại chỉ chứa các ký tự khoảng trắng hay không.

Thí dụ

Đây là một ví dụ minh họa việc sử dụng lớp XMLPullParser. Nó tạo ra một ứng dụng Phân tích cú pháp cơ bản cho phép bạn phân tích cú pháp một tài liệu RSS có ở đây tại /android/sampleXML.xml và sau đó hiển thị kết quả.

Để thử nghiệm với ví dụ này, bạn có thể chạy điều này trên thiết bị thực tế hoặc trong trình giả lập.

Các bước Sự miêu tả
1 Bạn sẽ sử dụng Android studio để tạo ứng dụng Android theo gói com.example.sairamkrishna.myapplication.
2 Sửa đổi tệp src / MainActivity.java để thêm mã cần thiết.
3 Sửa đổi res / layout / activity_main để thêm các thành phần XML tương ứng.
4 Tạo một tệp java mới trong src / HandleXML.java để tìm nạp và phân tích cú pháp dữ liệu XML.
5 Tạo một tệp java mới trong src / second.java để hiển thị kết quả của XML
5 Sửa đổi AndroidManifest.xml để thêm quyền truy cập Internet cần thiết.
6 Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.

Sau đây là nội dung của tệp hoạt động chính được sửa đổi 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);
         }
      });
   }

}

Sau đây là nội dung của tệp 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(); 
   }
}

Tạo một tệp và đặt tên là tệp second.java trong thư mục 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");
   }
}

Tạo tệp xml tại 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>

Sửa đổi nội dung của res/layout/activity_main.xml sau đây -

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

Sửa đổi res/values/string.xml theo sau

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

Đây là mặc định 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>

Hãy thử chạy ứng dụng của bạn. Tôi cho rằng bạn đã tạo raAVDtrong khi thiết lập môi trường. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào

biểu tượng Chạy từ thanh công cụ. Android studio cài đặt ứng dụng trên AVD của bạn và khởi động nó và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, nó sẽ hiển thị sau cửa sổ Trình mô phỏng -

Chỉ cần nhấn nút Tìm nạp nguồn cấp dữ liệu để tìm nạp nguồn cấp dữ liệu RSS. Sau khi nhấn, màn hình sau sẽ xuất hiện hiển thị dữ liệu RSS.

Chỉ cần nhấn nút kết quả để xem XML, được đặt tại http://tutorialspoint.com/android/sampleXML.xml