2012-02-23 111 views
0

我一直在嘗試這兩個星期的最好的一部分,我真的被卡住了。最初,我創建了一個簡單的ObjectOutputStream客戶端 - 服務器程序 - 客戶端是Android應用程序,但它不起作用(它讀取連接,但不讀取對象)。將名稱值對發送到服務器的最佳方式是什麼?

所以現在我很困惑我還可以採取哪些其他方法來完成這個簡單的任務?任何人都可以幫忙

+0

服務器是否有任何要求?否則,我會考慮去HTTP服務器並使用該協議來回發送數據。 – claesv 2012-02-23 16:01:57

回答

0

您是否嘗試過使用post方法進行URLConnection? :)

或者獲得方法,如:

String yourURL = "www.yourwebserver.com?value1=one&value2=two"; 
URL url = new URL(yourURL); 
URLConnection connection = url.openConnection(); 
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream())); 
response = in.readLine(); 
0

你可以嘗試JSON stirng發送數據。我們有很多關於如何使用JSON的東西,還有很多API。 JSONSimple是我可以建議的。它非常簡單。

+0

我一直在看JSON,但沒有找到一個我能理解的教程,它們看起來都很複雜。 – BodhiByte 2012-02-23 16:14:13

+0

如果你想序列化一個java對象到json。我建議Gson https://sites.google.com/site/gson/gson-user-guide。這非常好,特別是從json到java對象的反序列化時。 – 2012-02-23 16:23:39

0

你爲什麼不試試這個:

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
is = entity.getContent(); 
+1

也我推薦Json解析數據 – 2012-02-23 16:05:06

+0

所以我可以發佈一個對象(名稱值對)到服務器,並從servlets讀取它?這可以用哈希表工作嗎? – BodhiByte 2012-02-23 16:15:47

+0

如果您的對象數據只有一些字段(如ProductID,Price),那麼我認爲您可以將它們作爲關鍵值對發送。但是,如果您有很多字段,我相信使用json並讓圖書館爲您重新構建服務器上的對象。 :) – 2012-02-23 16:27:36

0

您可以使用此發佈一個實體服務器:

HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost postRequest = new HttpPost(url); 
    postRequest.setEntity(entity); 
    try { 

     HttpResponse response = httpClient.execute(postRequest 
       ); 
     String jsonString = EntityUtils.toString(response 
       .getEntity()); 
     Log.v(ProgramConstants.TAG, "after uploading file " 
       + jsonString); 
     return jsonString; 

    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

一個實體可以是名稱值對:

List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
nvps.add(new BasicNameValuePair("key1", value1)); 
nvps.add(new BasicNameValuePair("key2", value2)); 
Entity entity=new UrlEncodedFormEntity(nvps, HTTP.UTF_8) 

或者你也可以用bytearray發送一個實體。

Bitmap bitmapOrg=getBitmapResource(); 
ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao); 

byte[] data = bao.toByteArray(); 

MultipartEntity entity=new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE) 
entity.addPart("file", new ByteArrayBody(data, "image/jpeg", 
         "file")); 

如果你想要發佈的JSON服務器:
請看看這個鏈接How do I send JSon as BODY In a POST request to server from an Android application?
對於序列化和反序列化的Java對象,我建議https://sites.google.com/site/gson/gson-user-guide#TOC-Using-Gson 真的希望它可以幫助你看到發送數據的概述服務器

+0

謝謝我要查看帖子到服務器,並嘗試編寫一個servlet。散列表可以成爲一個實體嗎? – BodhiByte 2012-02-23 16:18:46

+0

是的,你可以從你的散列表構建一個NameValuePair對象。然後用該NameValuePair對象構造UrlEncodedFormEntity – 2012-02-23 16:21:32

相關問題