請發現我的內聯通信, 所有這一切發生在按鈕點擊。
我的問題是:
有沒有更好的(或Android風格)的方式做同樣的?
在異步任務或服務中觸發Webservice調用的理想方法,這樣您的UI線程將不會被阻塞,直到HTTP觸發並獲得響應。
什麼是檢索和發佈圖形內容到基於REST的Web服務的首選方法?
當您嘗試從後端檢索圖形內容時,圖形內容通常是base64。 請參閱此示例:http://androidtrainningcenter.blogspot.in/2012/03/how-to-convert-string-to-bitmap-and.html
用於將圖形張貼到服務器上 我假設您知道要上載的圖像的路徑和文件名。將此字符串添加到您的NameValuePair,並使用圖像作爲鍵名稱。
發送圖像可以使用HttpComponents庫完成。使用依賴包下載最新的HttpClient(當前爲4.0.1)二進制文件,並將apache-mime4j-0.6.jar和httpmime-4.0.1.jar複製到您的項目中,並將它們添加到您的Java構建路徑。
您將需要將以下導入添加到您的班級。
import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; 現在您可以創建一個MultipartEntity來將圖像附加到您的POST請求。以下代碼顯示瞭如何執行此操作的示例:
public void post(String url,List nameValuePairs){HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < nameValuePairs.size(); index++) {
if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
// If the key equals to "image", we use FileBody to transfer the data
entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
} else {
// Normal string data
entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
}
希望這有助於!