2010-03-16 9 views
1

我试图通过简单的HTTP方案将由Google协议缓冲区代码生成的消息发送到服务器。我所目前已经实现了在这里(原谅明显的不完整...):在android平台上高效地发送带有http的协议缓冲区消息

HttpClient client = new DefaultHttpClient(); 
String url = "http://192.168.1.69:8888/sdroidmarshal"; 
HttpPost postRequest = new HttpPost(url); 

String proto = offers.build().toString(); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
nameValuePairs.add(new BasicNameValuePair("sdroidmsg", proto)); 

postRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

try { 
    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    String responseBody = client.execute(postRequest, responseHandler); 

} catch (Throwable t) { 

} 

我与在互联网上通信经历不无更使HTTP - 而我了解的基础知识。 ..所以我的问题,在我盲目地开发其他应用程序之前,是否这是特别有效的?我最好想保持消息小,我认为toString()添加一些不必要的格式。

+0

事实上,这是一个愚蠢的做法... aargh ...什么是更好的方法? – 2010-03-16 21:16:53

+0

我假设它然后工作;很高兴我能帮忙。 :) – tzaman 2010-03-19 06:51:23

回答

2

Message.toString()打印出文本(非序列化)表示。您可能想要使用ToByteString()ToByteArray()来获取序列化版本,然后您可以将其传递给您的URL编码器。
当然,这会招致URL编码的一些开销。如果您可以处理多部分/表单数据样式POST,那么您可以直接将字节作为文件部分附加,使用application/octet-stream MIME类型;这样您将发送尽可能最小的消息,并且不必担心任何一端的URL编码/解码。