2012-03-30 26 views
2

我正在實現一個Android應用程序,我想在服務器中使用某些方法(這不是由我實現的)。現在,當我試圖讓一個HTTP-POST,我必須通過唯一字符串參數一切正常用類似代碼:Android - 是否有可能使用非String參數創建一個Http-Post?

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

nameValuePairs.add(new BasicNameValuePair("user[email]", email)); 
nameValuePairs.add(new BasicNameValuePair("user[password]", password)); 

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
String responseBody = httpclient.execute(httppost, responseHandler); 
JSONObject response=new JSONObject(responseBody); 
System.out.println("RESPONSE " + response.toString()); 

我得到的迴應是一個JSON對象,我可以很容易地使用帶屬性我希望。

現在有方法需要非字符串值(整數或布爾值)作爲參數。我無法在列表中傳遞這些參數,例如List<NameValuePair>,因爲這隻需要字符串。我試圖通過它作爲一個JSON對象,但沒有成功。

所以我的第一個問題是,如果有可能在http post中有非String參數?如果是的話,該怎麼辦?例如,如果在上面的代碼中,電子郵件是一個整數並且密碼是布爾值(例如搖動),我應該如何處理它們?

謝謝大家提前!

+0

只需傳遞它們的字符串表示形式? – 2012-03-30 18:15:04

+0

你的意思是「1」代表1?但服務器等待我想的整數。所以我得到一個IO異常,我認爲是因爲這..不是有一些方法來傳遞非String或http-post不允許它嗎? – george 2012-03-30 18:20:13

+0

是否有正常運行的網頁發佈到您嘗試使用的服務器資源?如果是這樣,你可以使用類似Firefox的HttpFox插件或其他流量嗅探器來查看成功的HTTP請求是什麼樣子並模仿它的格式? – 2012-03-30 19:00:42

回答

0

當然,考慮一個文件上傳。

的是二進制文件(正常,考慮上傳的圖片,如果有人認爲文本不足夠二進制)

的技術是HTTP-POST

+0

是的,我想到了..但我不知道是否一切都作爲一個字符串發送和解碼從服務器..所以我應該如何通過非串參數? – george 2012-03-30 18:30:29

+1

這個鏈接非常有用。然而,它使用urlconnection來溝通http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests – 2012-03-30 18:46:23

+0

你必須知道的API和合同爲您獲取/張貼的資源。 – Shellum 2012-03-30 18:58:46

0

所有的HTTP請求參數會在爲字符串,但服務器端代碼可以轉換它們。例如,服務器可以從請求參數中獲取JSON字符串,並將其轉換爲包含任意數量的序列化數據的對象。這可能包括整數,列表等。

雖然實現將取決於該服務器端代碼。例如,客戶端和服務器都可以使用GSON來回發送對象和列表。

public void doPost(...) 
{ 
    String param = request.getParameter("someParam"); 
    MyCustomObject myCustomObject = (MyCustomObject)gson.fromJson(param, MyCustomObject.class); 
} 
+0

因此,在這段代碼中,您將從服務器請求的參數作爲一個字符串抓取,然後按照您想要的任何其他類型來形成它?那麼如何將它傳遞給服務器呢?我很困惑.. – george 2012-03-30 18:35:27

+0

「所有http請求參數都會以字符串的形式出現」,對於post var而言是錯誤的。只有url參數將是「字符串」 – 2012-03-30 18:38:56

+0

所有請求參數,如上例所示,您可以通過request.getParameter訪問,參數爲字符串:http://docs.oracle。COM/JavaEE的/ 6/API /的javax/servlet的/ ServletRequest.html – Shellum 2012-03-30 18:59:24

相關問題