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 ให้เปิดไฟล์กิจกรรมของโครงการแล้วคลิก
เพียงกดปุ่มดึงข้อมูลเพื่อดึงข้อมูล RSS หลังจากกดหน้าจอต่อไปนี้จะปรากฏขึ้นซึ่งจะแสดงข้อมูล RSS
เพียงกดปุ่มผลลัพธ์เพื่อดู XML ซึ่งวางไว้ที่ http://tutorialspoint.com/android/sampleXML.xml