Android客戶端連接服務器端,向服務器端發送請求HttpURLConnection


在Java中想后台服務器發送請求一般都直接使用了Java的網絡編程,或者使用HttpClient向后台服務器端發送HTTP請求。雖然在安卓中,所有Java的API都可以使用,而卻使用其並不會出現什么問題,但是HttpClient畢竟是基於Java標准實現的一個類,在安卓中,想要連接后台服務器端,專門基於android實現了一個類,為HttpURLConnection。通過HttpURLConnection,我們可以實現向服務器端發送HTTP請求,連通后台服務器和客戶端。

這幾天剛好在做android客戶端和服務器端通信,使用了HttpURLConnection。

HttpURLConnection可以實現一個完整的HTTP協議的請求。

首先,new一個URL,知道連接服務器的地址。

1 URL url = new URL(AppsData.LoginServerURL);
2 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

其中AppsDatah.LoginServerURL這里設定的是一個URL。

接下來就是設置HTTP協議的內容:

1  //設置HTTP協議
2  httpURLConnection.setRequestMethod("POST");
3 httpURLConnection.setDoOutput(true);
4 httpURLConnection.setDoInput(true);
5 httpURLConnection.setConnectTimeout(5000);
6 httpURLConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");

接下來和一般的網絡編程一樣使用流將內容寫入:

1 OutputStream outputStream = httpURLConnection.getOutputStream();
2 objectOutputStream = new ObjectOutputStream(outputStream);
3 
4 StringBuffer stringBuffer = new StringBuffer();
5 stringBuffer.append(Data);
6 
7  objectOutputStream.writeObject(stringBuffer);

在末尾一定要記着使用flush方法,當這個方法使用的時候數據才算是真正發送成功,但是這個方法一定要放在以上設置最后才能有效。

1 objectOutputStream.flush();
2 httpURLConnection.getInputStream();

通過以上方式就可以發送數據。

不過值得注意的是,在安卓3.0以后,如果想要向后台發送一個請求,或者說是建立一次連接的時候,如果直接調用這個方法,程序會出現報錯。

原因是:當主程序在想后台發送請求的時候,不一定會很快就給發送到,如果沒有發送到,主程序會一直等待響應,但是樣程序就無法做其他的事情,看起來這個程序就很“卡”,android為了防止這個事情發生就將在主線程請求連接的過程設置為異常,這里我們可以使用多線程的方式來想后台發送請求,每向后台發送一次請求,就在程序中創建一條線程,不影響主線程的運行。

這里還需要注意的是當一個線程運行完成之后,再次啟動這個線程是可以的,但是非常麻煩,所以建議再次請求就再次創建一條線程。


免責聲明!

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



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