【问题标题】:Android: Creating and Sending an XML SOAP Request ProgrammaticallyAndroid:以编程方式创建和发送 XML SOAP 请求
【发布时间】:2013-03-15 05:55:43
【问题描述】:

您好,提前致谢。我找到了这个教程,我正在尝试模仿它:http://lalit3686.blogspot.com/2012/06/calling-soap-webservice-using-httppost.html。在我的 iOS 应用程序中,我能够创建带有 xml 属性的字符串,将其作为 SOAP 请求发送,并以字符串形式获得 xml 响应。我正在尝试对我的 android 应用做同样的事情。

不幸的是,有些东西不起作用。我已附上相关代码。

    StringBuilder stringBuilder = new StringBuilder ();
    stringBuilder.append(String.format("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
            "xmlns:csr=\"http://www.mywebsite.net/\">\n" +
            "<soapenv:Header/>\n" +
            "<soapenv:Body>\n" +
            "<csr:www.mywebsite.net><![CDATA[\n" +
            "<www.mywebsite.net>\n" +
            "<Request>\n" +
            "<user>%s</user>\n" +
            "<password>%s</password>\n" +
            "<Function>requestdata</Function>\n" +
            "<FromDate>2013-01-01</FromDate>\n" +
            "<ToDate>2014-01-01</ToDate>\n" +
            "</Request>\n" +
            "</www.mywebsite.net>\n" +
            "]]></csr:www.mywebsite.net>\n" +
            "</soapenv:Body>\n" +
            "</soapenv:Envelope>\n", username, password));

    String xml = stringBuilder.toString();
    HttpPost httpPost = new HttpPost("http://www.mywebsite.net/");
    StringEntity entity;
    String response_string = null;

    try {

        entity = new StringEntity(xml, HTTP.UTF_8);
        httpPost.setHeader("Content-Type","text/xml;charset=UTF-8");
        httpPost.setEntity(entity);
        HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(httpPost);
        response_string = EntityUtils.toString(response.getEntity());
        Log.d("request", response_string);
        prefs.edit().putString("response", response_string).commit();

    } 

    catch (Exception e) {
        e.printStackTrace();
    }

编辑:问题已修复。我收到了错误:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099).

上面的代码有效——只要确保在你的 onCreate() 方法中包含这个代码。

 if (android.os.Build.VERSION.SDK_INT > 9) {
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
  StrictMode.setThreadPolicy(policy);
 }

这允许您将主线程用于 SOAP 请求/响应。

【问题讨论】:

标签: android xml soap wsdl


【解决方案1】:

我收到了错误:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)。

我用谷歌搜索了这个错误并找到了这个链接:DefaultHttpClient to AndroidHttpClient - 它建议我在我的 onCreate 方法中包含以下代码。

if (android.os.Build.VERSION.SDK_INT > 9) {
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
  StrictMode.setThreadPolicy(policy);
}

现在它的工作。事实上,Android 不再让网络操作在主线程上进行。

【讨论】:

    【解决方案2】:

    这是因为您在违反严格模式的 UI 线程上运行网络操作。使用 AsyncTask 进行后台操作。

    【讨论】:

      【解决方案3】:

      http://www.youtube.com/watch?v=v9EowBVgwSo。该视频有一个关于如何在android中发送soap webservice请求的教程。

      http://www.helloandroid.com/tutorials/using-ksoap2-android-and-parsing-output-data。这里的链接有一个解释的例子。浏览链接并相应地修改您的代码。

      以 xml 格式发送请求。我有类似的要求,我使用以下格式以 xml 形式发送肥皂请求。根据您的需要修改以下内容。我

      PropertyInfo loginreq = new PropertyInfo();
      loginreq.name="LoginReq";
      loginreq.type=String.class;
      loginreq.setValue("<LoginReq>" 
           +"<nickName>"+name+"</nickName>" 
           +"<password>"+pass+"</password>" 
           +"<IMEI>"+mImei+"</IMEI>" 
           +"<location>" 
           +"<latitude>"+lati+"</latitude>"
               +"<longitude>"+longi+"</longitude>"
           +"</location>" 
           +"</LoginReq>");
      request.addProperty(loginreq);
      

      Android, sending XML via HTTP POST (SOAP)。查看链接中接受的答案。

      编辑

      http://www.ibm.com/developerworks/opensource/library/x-android/。查看标题创建 XML。

      【讨论】:

      • 行 response.put("HTTPStatus",httpResponse.getStatusLine().toString());给我一个错误...我现在正在修补它。
      • 通过向请求添加属性来尝试上述代码。developer.android.com/training/articles/…。您的代码中有太多字符串。查看标题下的链接避免创建不必要的对象。
      • 您的回复也是 xml 格式。你得到的错误是什么??
      • 我期待 xml 格式的响应 - 但我正计划像在我的 ios 应用程序中那样将其解析为字符串
      • 所以你得到了回应??你现在需要解析那个响应吗??
      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多