歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OPhone應用程序內容在線更新的新思路

OPhone應用程序內容在線更新的新思路

日期:2017/3/1 11:18:10   编辑:Linux編程
對於大多數像我這樣的小型Ophone應用程序的學生開發者來說,如果開發的是一個與內容更新有關的應用程序的話,是不會選擇搭建一個服務端去完成內容的更新,一來是學生經濟能力有限,二是時間有限,畢竟學習才是主要目的。但是這是不是就意味著沒有解決的辦法呢?我想對於部分應用程序還是有解決辦法的,例如像新聞資訊類的客戶端,或者有關生活休閒內容的小程序,我們可以借助別人來完成我們自己程序的內容更新,那麼我們該如何做呢?


RSS訂閱
  看到這個副標題,應該大家會很容易想到我的意圖是什麼吧。不錯,我們可以利用RSS訂閱的內容完成我們內容的更新,因為RSS訂閱的內容是每天可以更新的,我們只要找到與我們軟件內容相關的RSS源就可以了。另外之所以聯想到RSS的另外一個原因是,當我們請求RSS源地址時,服務器返回給我們的是一個XML文檔,而對於XML解析我想大家應該是非常熟悉的吧,也是一個比較簡單的過程,所以說呢,這樣的條件得天獨厚,完成我們軟件的相關內容的更新不就是小菜一碟嗎?整個過程其實就是相當於完成了一個RSS閱讀器,只是我們是後台進行數據提取。所以下面我就簡單的用一個demo給大家說明一下。我的demo是基於星座軟件,可以提供每天的星座運程,所以這裡我只是簡單給大家演示下我獲取十二個星座每天內容,然後放在textview中顯示。


XML解析的設置
  這一部分內容的話主要就是關於XML解析的問題,因為我們做的是手機軟件內容更新,所以需要盡可能的考慮的手機的局限性,我們需要盡可能少的消耗內存,所以我建議選擇SAX解析方式,關於SAX解析我想不用太多解釋,大家都知道的。下面請看:

  1. publicclassMyHandlerextendsDefaultHandler
  2.   {
  3.    String tagName;
  4.    String[]horoStrings=new String [12];
  5.    inti=0;
  6.    /**開始解析節點,注意要在此時找到自己需要的內容所屬節點*/
  7.    publicvoidstartElement(String uri, String localName, String name,
  8.    Attributes attributes) throwsSAXException {
  9.    // TODO Auto-generated method stub
  10.    tagName=localName;
  11.    if(localName.equals("description"))
  12.    {
  13.    i++;
  14.    }
  15.   
  16.    }
  17.   publicvoid characters(char[] ch, int start, int length)
  18.    throwsSAXException {
  19.    // TODO Auto-generated method stub
  20.    /**如果是想要的節點名,就將內容獲取*/
  21.    System.out.println("my god");
  22.    if(tagName.equals("description"))
  23.    {
  24.    horoStrings[i]=new String(ch,start,length);
  25.    }
  26.    }
  27.   public String [] getParseData()
  28.   {
  29.    returnhoroStrings;
  30.   }
  31.   }


簡單對以上解釋下,我是用一個數組把xml中的十二個星座的運程給截取下來,運程的內容是放在節點<description></description>中間,所以我查找的節點就是"description",然後在讀取內容的時候我就把需要的內容放進數組中,最後再構造一個方法返回所獲取的數組。然後解析方面簡單的完成了。


發送請求獲取資源
  接下來我們需要的是向RSS源地址發送請求並得到返回的XML,然後對其進行解析:

  1. try{
  2.   URL url=newURL("http://feeds.astrology.com/dailyoverview");
  3.   SAXParserFactorysFactory=SAXParserFactory.newInstance();
  4.   XMLReader reader=sFactory.newSAXParser().getXMLReader();
  5.   MyHandlermyHandler=newMyHandler();
  6.   reader.setContentHandler(myHandler);
  7.   reader.parse(newInputSource(url.openStream()));
  8.   String[]data= myHandler.getParseData();
  9.   Intent intent=newIntent();
  10.   intent.putExtra("data",data);
  11.   intent.setClass(RSSreader.this, ShowHoroscopes.class);
  12.   startActivity(intent);
  13.   }
  14.   catch (Exception e) {
  15.   // TODO: handle exception
  16.   e.printStackTrace();
  17.   }

SAX解析的初始化大家應該都是熟悉的,把打開xml文件流並開始進行解析。


多線程處理
  我們知道在實際運行中為了良好的用戶體驗,解析過程中我們需要做雙線程處理,這樣才不會讓用戶以為假死,所以我們可以前台設置一個正在解析的Dialog,這樣的話,可以讓用戶更好的了解更新進程,所以如下:

  1. mydialog=ProgressDialog.show(RSSreader.this, "進度提示", "正在解析。。。。。。");
  2.   new Thread()
  3.   {
  4.   publicvoid run()
  5.   {
  6.   try{
  7.   URL url=newURL("http://feeds.astrology.com/dailyoverview");
  8.   SAXParserFactorysFactory=SAXParserFactory.newInstance();
  9.   XMLReader reader=sFactory.newSAXParser().getXMLReader();
  10.   MyHandlermyHandler=newMyHandler();
  11.   reader.setContentHandler(myHandler);
  12.   reader.parse(newInputSource(url.openStream()));
  13.   String[]data= myHandler.getParseData();
  14.   Intent intent=newIntent();
  15.   intent.putExtra("data",data);
  16.   intent.setClass(RSSreader.this, ShowHoroscopes.class);
  17.   startActivity(intent);
  18.   }
  19.   catch (Exception e) {
  20.   // TODO: handle exception
  21.   e.printStackTrace();
  22.   }
  23.   finally
  24.   {
  25.   mydialog.dismiss();
  26.   }
  27.   }
  28.   }.start();
  29.   }

效果如圖:

   總結
  雖然這種方法並不能適用於大多數應用軟件的內容更新,但是對於我們這些學生開發者來說,如果想要實現一個關於內容方面的應用軟件,在沒有服務端的情況下,我想我們可以嘗試著找到相關的RSS資源,然後借鑒這種方法達到我們想要的期望。

Copyright © Linux教程網 All Rights Reserved