在Java中想後臺服務器發送請求通常都直接使用了Java的網絡編程,或者使用HttpClient向後臺服務器端發送HTTP請求。雖然在安卓中,全部Java的API均可以使用,而卻使用其並不會出現什麼問題,可是HttpClient畢竟是基於Java標準實現的一個類,在安卓中,想要鏈接後臺服務器端,專門基於android實現了一個類,爲HttpURLConnection。經過HttpURLConnection,咱們能夠實現向服務器端發送HTTP請求,連通後臺服務器和客戶端。java
這幾天恰好在作android客戶端和服務器端通訊,使用了HttpURLConnection。android
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");
接下來和通常的網絡編程同樣使用流將內容寫入:app
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方法,當這個方法使用的時候數據纔算是真正發送成功,可是這個方法必定要放在以上設置最後纔能有效。url
1 objectOutputStream.flush(); 2 httpURLConnection.getInputStream();
經過以上方式就能夠發送數據。spa
不過值得注意的是,在安卓3.0之後,若是想要向後臺發送一個請求,或者說是創建一次鏈接的時候,若是直接調用這個方法,程序會出現報錯。線程
緣由是:當主程序在想後臺發送請求的時候,不必定會很快就給發送到,若是沒有發送到,主程序會一直等待響應,可是樣程序就沒法作其餘的事情,看起來這個程序就很「卡」,android爲了防止這個事情發生就將在主線程請求鏈接的過程設置爲異常,這裏咱們可使用多線程的方式來想後臺發送請求,每向後臺發送一次請求,就在程序中建立一條線程,不影響主線程的運行。
這裏還須要注意的是當一個線程運行完成以後,再次啓動這個線程是能夠的,可是很是麻煩,因此建議再次請求就再次建立一條線程。