2012-02-23 63 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

相关问题