分块Web服务响应

时间:2011-03-07 16:58:54

标签: android

您能否向我提供一个示例,说明如何从Android中的Web服务读取chuncked响应

感谢

修改 我试着打电话给一个肥皂网服务,用一个代表图像的base64编码字符串回复我

这是代码:

String SOAP_ACTION = "service soap action";
         try {
            URL u = new URL("server url");
            URLConnection uc = u.openConnection();
            HttpURLConnection connection = (HttpURLConnection) uc;
            connection.setDoOutput(true);
               connection.setDoInput(true);
               connection.setRequestProperty("SOAPAction", SOAP_ACTION);
               connection.setRequestMethod("POST");
               connection.setRequestProperty("Content-type", "text/xml; charset=utf-8");
String xmldata="soap request envelope";
//send the request
               OutputStream out = connection.getOutputStream();

                  Writer wout = new OutputStreamWriter(out);

                  wout.write(xmldata);

                  wout.flush();

                  wout.close();

                  BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));



                    String result;
                    StringBuilder builder=new StringBuilder();
                            //read response
                    while ((result=rd.readLine()) != null) {
                        builder.append(result);
                    }

3 个答案:

答案 0 :(得分:1)

Preachy Answers:

  1. 您应该使用SOAP库而不是尝试重新发明轮子:How to call a SOAP web service on Android
  2. 如果可能,请使用REST服务而不是SOAP,因为SOAP不适合移动平台:http://javatheelixir.blogspot.com/2009/12/soap-vs-rest-in-service-layer-for.html
  3. 实际答案:

    问题:

    • 看来你只是得到了第一部分回复。

    可能的解决方案

    1. 尝试write(int c)而不是write(String str)。然后忽略\ r和\ n字符。
    2. 在循环中使用read()而不是readLine()。
    3. 提问者注意:在Preachy答案中留下道歉。我相信你已经考虑过那些选择。但它将帮助那些能够使用SOAP库的人。如果您因特定原因决定不使用SOAP库,请将其放在评论中以获取其他人的利益。

答案 1 :(得分:0)

尝试使用更通用的类,例如DefaultHttpClientHttpPost来处理更高级别的HTTP交互。

答案 2 :(得分:0)

您不想使用urlconnection类。你会想要使用与android捆绑在一起的httpclient,如下所示。

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://something.com/something");
HttpResponse response = client.execute();

int code = response.getStatusLine().getStatusCode();
if(code == 200){
   InputStream is = response.getEntity().getContent();

   //Now parse the xml coming back
   SAXParserFactory spf = SAXParserFactory.newInstance();
   SAXParser sp = spf.newSAXParser();

   XMLReader xr = sp.getXMLReader();
   YourParser parser = new YourParser();

   xr.setContentHandler(parser);

   xr.parse(new InputSource(is));
}

您应该只需要创建xml解析器来解析对象。希望这可以帮助。