在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為了防止這個事情發生就將在主線程請求連接的過程設置為異常,這里我們可以使用多線程的方式來想后台發送請求,每向后台發送一次請求,就在程序中創建一條線程,不影響主線程的運行。
這里還需要注意的是當一個線程運行完成之后,再次啟動這個線程是可以的,但是非常麻煩,所以建議再次請求就再次創建一條線程。
