android+網路操作詳解1

來源:互聯網
上載者:User

我們在做ANDROID應用開發時,無非就兩種,一種為單純的C/S手機本地應用操作,一種就是通過網路操作,在手機本地應用操作相對來說是很簡單的,但是要在網路上實現互動,這可能我需要學習與熟練更多的網路知識才能夠做出比較好的在網路上進行互動的手機應用程式,下面,我就詳細的為大家談談在通過ANDROID平台的用戶端,我們怎麼去與網路實現互動呢:

首先我們要知道在網路上實現互動,這也就關係到資料轉送的問題,當然,只要有資料轉送,就可能會考慮到資料格式問題,比如傳輸與接收端走的協議會不會出現亂碼問題等,在這裡,我首先講講關於比較平常的使用HTTP協議來對資料互動與處理的過程吧,簡單的先看一個我們怎麼通過網路來擷取一張圖片顯示在手機自己的ANDROID手機上的小例子吧:首先我們需要通過手機的螢幕輸入一個串連網路的路徑地址, 如:http://img.blog.163.com/photo/HSBYOIG22ZqYMwn635TzkQ== /2272066012008814682.jpg,然後把它設定進對二進位流處理的方法裡:byte[] datas = getImage(path),在這個方法我們是這樣做:public static byte[] getImage(String path){首先我們要執行個體一個網路對象,即URL匹配地址:URL url = new URL(path);然後開啟它:url.openConnection();並使用一個類似於瀏覽器的HttpURLConnection來對其串連:HttpURLConnection conn = url.openConnection();此時,我們似乎已經開啟了對網路操作的通道,這時,我們需要去放入一些頭參數資訊對去請求校正:如連線逾時資訊:conn.setReadTimeOut(5);串連請求方式:conn.setRequestMethod("GET");在這裡,由於我們只是發送要求標頭有資訊,所以只需要使用GET方式方式就可以,有的人可能會有疑問,為什麼不使用POST方式呢,這個我在後面會詳細講解到,當我們發送了這兩個頭資訊後,我們要怎麼知道我們的發送與串連是成功了的了,這是就需要網路服務對其做些反饋,然而網路服務是做了相應的返回對比資訊的,如200是響應成功,404無服務檔案等,還有一些相關的就請朋友之間去網路上查看一下了,在這裡你可以使用HttpWatch工具對其詳細查看的,如果有需要的朋友,可以在我的資源你下載,好了,我們就可以使用一個判斷語句來得知服務的響應成功否:if(conn.getResponseCoed()==200){說明串連與響應成功,這時服務端就會通過網路以流的形式要求我們去就收,當然接收這個流,你可以對其封裝接收也行,只不過都是你自己需要覺得做的事,自己想怎麼做要看你自己的了,然而我們就直接以原始的二進位流來讀取吧,當然,在這裡我們需要考慮大一張圖片可能比較大,所以需要使用緩衝的機制來讀取,也就是把一部分線寫入記憶體裡,以鏈表的方式,想對去鏈表的頭,後邊的尾會有流繼續寫入,核心代碼就是:InputStream inStream = conn.getInputStream();ByteArrayOutputStream outStream = new ByteArrayOutputStream();int len = 0;byte[] buffer = new byte[1024];while((len == inStream.readLine(buffer))!=-1){outStream.write(buffer,0,len);}}},獲得了這個流的資料,我們該怎麼顯示在手機上呢,這其實很簡單了,只是需要注意的是,格式問題,因為我們是以二進位流的方式讀取獲得的,所以我們保持時同樣需要使用支援二進位格式的圖片格式來接受與儲存,如:byte[] datas = getImage();Bitmap bitmap = BitmapFactory.decoByteArray(data,0,data.length)來解碼並以二進位位元影像來儲存,這樣據好做直接設定到顯示圖片的ImageView組件裡就行了,這樣可就實現了通過手機輸入網路路徑擷取網狀圖片的全過程,這個過程其核心也就是使用了流緩衝機制,使其讀取與顯示過程更流暢,當然這隻是一個簡單網路操作,相對來說網路來操作不僅僅只是如此,在下來我們繼續簡單介紹一個例子,如網路源碼查看器是在ANDROID 裡是怎麼實現的呢,其實與圖片查看器的原理差不多,首先我們通過在ANDROID手機上使用EDITETEXT輸入一個網路地址,即一個網路路徑,然後在使用一個方法來單獨處理這個路徑的請求機制,同樣我們可以使用URL來串連開啟連結:url.openConnection();使用 HttpURLConnection去佈建要求參數:conn.setReadTimeOut(5);conn.setRequestMethod("GET"),然後判斷響應資訊:conn.setResponseCode == 200的話就說明我們請求成功,並可以開始對接流的傳輸資訊了,也就是說服務端的流已經對你開啟了一個通道允許你去讀取,這時候,你就可以使用 conn.getInputStream()來擷取流,當然這是是以二進位方式傳遞的,為了接收方便,同樣以二進位來接收:byte[] datas = conn.getInputStream();如果你以上面的方式直接操作的話,那就糟糕了,還是使用一個緩衝流的機制來做吧:ByteArrayOutputStream outStream = new ByteArrayOutStream();int len;byte[] buffer = new byte[1024];while((len = conn.getInputStream().read(buffer))!=-1) {outStream.write(buffer,0,len);},OK,這樣就可以全權獲得了你想要的流資訊,以String方式進行儲存起來吧:new String(datas,"gb2312"),記得不要忘了編碼格式,不然會有亂碼哦,最後儲存進你的TEXTVIEW裡面顯示看看吧.我會時常上傳一些源碼,包括我們在這些內容中講解的知識點,希望大家都能動手去實踐一下,不然你的收穫會很小的.....下一節,我繼續以案例來講解....

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.