Android客戶端與服務器數據交互流程


一個門戶網站的制作的流程:首先,由網頁設計師只做網頁設計,即畫出來網站在瀏覽器中顯示的樣子,然后由前端人員編寫Html+CSS+JS來實現網站的動態效果,比如說導航欄的下拉顯示,然后Ajax的局部信息更新等,然后通過后台程序如JSP,PHP, .NET等語言將數據庫中的信息與前台頁面相結合,這樣,一個站就這樣被建好了。而Android客戶端,也是有UI設計師,UI前端,程序構成的,同樣程序這邊的話,最近Html5+CSS3的火熱開啟,很多公司也需要html5+css3進行Android程序的開發了。嗚嗚,搶我的飯碗。雖然說哥也是懂html+css的。嘿嘿,這樣解釋的話,可能大家不清楚,其實木有必要弄清楚網站的建站過程,這里只是給大家普及一下知識,沒必要弄清楚。
基礎知識:我們需要知道,Http協議是基於TCP協議的,而TCP協議是一種有連接,可靠的傳輸協議,如果丟失的話,會重傳。所以這樣的話,就不會有數據的丟失了。而Http協議有三種方法,Get,Post,Head方法,但是用的多的只有GetPost方法,Get方法是將請求參數放在請求頭中,所以請求的參數在URL中可見,而Post方法是將請求參數放在數據部分,所以在URL中不可見,Post相對來說保密,所以在提交重要信息的時候,用的都是HttpPost方法來實現的,比如說,注冊賬號密碼就是使用的HttpPost,因為賬號密碼需要保密,而上百度搜索安卓巴士,在瀏覽器的地址欄中就會顯示這種URL,其中wd=XXX是經過加密后的安卓巴士,其他的參數也是必須要的請求參數 http://www.baidu.com/s?wd=%E5%AE%89%E5%8D%93%E5%B7%B4%E5%A3%AB&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=11996
 
而在B/S模式中,B代表瀏覽器,S代表服務器,在瀏覽器和服務器的通信之中,因為B/S之間不會一直保持連接,所以才會加入Cookie機制,來辨認所操作的對象。用戶瀏覽網頁的操作如下:當用戶點擊一個連接或者一個按鈕的時候,瀏覽器通過發送一個請求給服務器,然后由服務器接收該請求,然后解析到用戶請求的是哪些內容,然后查找到相關資源,再將數據返回給瀏覽器,由瀏覽器解析數據,然后顯示給用戶看到用戶所需要看到的頁面。所以,AndroidB/S模式差不多,其實也就是發送請求,接收數據,然后解析數據,顯示到手機上的過程,沒什么太大的區別,誰讓咱用的是互聯網,用的是TCP/IP協議呢,是吧。要理解是:所有的操作都是向服務器請求數據的過程。
首先,我們要熟悉Android的HttpGet和HttpPost請求。其中Apache公司已經提供了兩個類,叫:HttpGet和HttpPost兩個類。兩個類的用法不同,不解釋貼代碼:
1.        使用HttpGet請求Baidu的主頁:
//使用HttpGet方法,把百度的主頁傳入
HttpGet hettpGet = new HttpGet("http://www.baidu.com/");
//使用默認的HttpClient
HttpClient hc = new DefaultHttpClient();
try {
//執行HttpGet方法,並且獲取返回的響應
        HttpResponse response = hc.execute(hettpGet);
//如果響應碼為200則表示獲取成功,否則為發生錯誤
if (response.getStatusLine().getStatusCode() == 200) {
//s就是獲得的HTML代碼
        String s = EntityUtils.toString(response.getEntity());
        System.out.println(s);
}
} catch (ClientProtocolException e) 
{
        e.printStackTrace();
        } catch (IOException e) 
{                                            e.printStackTrace();
                                } 

   這樣就向百度服務器發送了一個HttpGet請求,請求的是百度的搜索首頁,服務器返回來都是Html代碼,只是瀏覽器有解析HTML的功能,將HTML代碼轉換成所顯示的頁面,所以,打印出來的都是HTML代碼。

//使用HttpPost發送請求
HttpPost httpPost = new HttpPost(url);        
//使用NameValuePaira保存請求中所需要傳入的參數
List<NameValuePair> paramas = new ArrayList<NameValuePair>();
        paramas.add(new BasicNameValuePair("a", "a"));
        try {

HttpResponse httpResponse;
//將NameValuePair放入HttpPost請求體中
httpPost.setEntity(new UrlEncodedFormEntity(paramas,
                                                        HTTP.UTF_8));
//執行HttpPost請求
httpResponse = new DefaultHttpClient().execute(httpPost);
//如果響應碼為200則表示獲取成功,否則為發生錯誤
if (httpResponse.getStatusLine().getStatusCode() == 200) {
String s = EntityUtils.toString(httpResponse
                                                .getEntity());}
                                } catch (UnsupportedEncodingException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                } catch (ClientProtocolException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }    

  

這樣就發送了一個HttpPost請求了。簡單吧。所有的獲取數據操作基本上都是在HttpGetHttpPost上拓展開的,然后發送了請求之后呢,服務器就會接受到一個請求了,服務器接收到請求就會通過方法來接收到 Android客戶端中發送的參數,並且通過后台程序來解析參數,然后通過數據庫查找到所需要的信息,然后通過PHP后台將數據處理成JSON數據格式返回給HttpResponseEntity,然后通過EntitiyUtils.toString方法來將Entity轉化成為String對象,然后所得到的String對象呢就是一個JSON數據了。接下來的事情就是JSON數據的解析啦。   
最后簡單說一下動態建站的過程吧:頁面分為兩種,一種靜態的,一種動態的,現在靜態的站基本上都沒了,全是動態的了,靜態頁面全是用Html+CSS寫的,只能實現簡單的從一個頁面打開另外一個頁面,沒有與服務器進行數據交互的過程,只是進行簡單的加載靜態頁面,不會有數據從數據庫里面進行差刪改查等操作,並且不用使用模板生成器生成文件,再將文件內容返回給瀏覽器呢而其中呢,而動態建站的過程就是這樣的:首先由發送請求給服務器,然后服務器通過數據庫查詢數據,然后再將查詢出來的數據與模板生成器結合,生成一個.php文件,然后瀏覽器會將php文件解析成為html然后顯示在瀏覽器上顯示。
 
歡迎熱愛安卓開發者加入群共同進步。 南京群 220818530, 武漢群121592153,,杭 州群253603803, 廈門群253604146, 湖南群217494504, 大連群253672904
青島群 257925319


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM