Учебники

Android — RSS Reader

RSS означает действительно простую синдикацию. 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, такой как приведенный выше, имеет следующие элементы.

Sr.No Компонент и описание
1

канал

Этот элемент используется для описания канала RSS

2

заглавие

Определяет заголовок канала

3

ссылка на сайт

Определяет гиперссылку на канал

4

описание

Описывает канал

канал

Этот элемент используется для описания канала RSS

заглавие

Определяет заголовок канала

ссылка на сайт

Определяет гиперссылку на канал

описание

Описывает канал

Парсинг 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-файл состоит из событий, Name, Text, 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-файлов. Эти методы перечислены ниже —

Sr.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 только символы пробела.

getAttributeCount ()

Этот метод просто возвращает количество атрибутов текущего начального тега.

getAttributeName (int index)

Этот метод возвращает имя атрибута, указанного значением индекса.

getColumnNumber ()

Этот метод возвращает Возвращает текущий номер столбца, начиная с 0.

getDepth ()

Этот метод возвращает Возвращает текущую глубину элемента.

GetLineNumber ()

Возвращает текущий номер строки, начиная с 1.

getNamespace ()

Этот метод возвращает URI пространства имен текущего элемента.

getPrefix ()

Этот метод возвращает префикс текущего элемента.

GetName ()

Этот метод возвращает имя тега.

GetText ()

Этот метод возвращает текст для этого конкретного элемента.

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, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Android-студия устанавливает приложение на AVD и запускает его, и, если все в порядке с настройками и приложением, оно отобразится в следующем окне эмулятора —

Anroid Rss Reader Учебник

Просто нажмите кнопку «Получить канал», чтобы получить канал RSS. После нажатия появится следующий экран, который покажет данные RSS.

Android RSS Reader Tutorial

Просто нажмите кнопку результата, чтобы увидеть XML, который находится по адресу http://tutorialspoint.com/android/sampleXML.xml