歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

對於大多數像我這樣的小型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.   }   
  29.   }.start();   
  30.   }  

效果如圖:

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

Copyright © Linux教程網 All Rights Reserved