Android:以编程方式创建和发送XML SOAP请求

Android:以编程方式创建和发送XML SOAP请求,android,xml,soap,wsdl,Android,Xml,Soap,Wsdl,你好,先谢谢你。我找到了这个教程,我正在尝试模仿它:。在我的iOS应用程序中,我能够创建具有xml属性的字符串,将其作为SOAP请求发送,并以字符串形式获得xml响应。我正试图用我的android应用程序做同样的事情 不幸的是有些东西不起作用。我已附上相关代码 StringBuilder stringBuilder = new StringBuilder (); stringBuilder.append(String.format("<soapenv:Envelope xm

你好,先谢谢你。我找到了这个教程,我正在尝试模仿它:。在我的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();
    }
上面的代码可以工作-只需确保在onCreate()方法中包含此代码

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

。视频中有一个关于如何在android中发送soap Web服务请求的教程

。这里的链接有一个带说明的示例。浏览链接并相应地修改代码

以xml格式发送请求。我有一个类似的需求,我使用下面的格式发送了一个xml格式的soap reuest。根据您的需要修改以下内容。我

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);
PropertyInfo loginreq=newpropertyinfo();
loginreq.name=“loginreq”;
loginreq.type=String.class;
loginreq.setValue(“”)
+“”+名称+“”
+“”+通过+“”
+“+mImei+”
+"" 
+“+lati+”
+“”+longi+“”
+"" 
+"");
请求。添加属性(loginreq);
。看看链接中的答案

编辑

。请看一下“创建XML”标题。

。视频中有一个关于如何在android中发送soap Web服务请求的教程

。这里的链接有一个带说明的示例。浏览链接并相应地修改代码

以xml格式发送请求。我有一个类似的需求,我使用下面的格式发送了一个xml格式的soap reuest。根据您的需要修改以下内容。我

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);
PropertyInfo loginreq=newpropertyinfo();
loginreq.name=“loginreq”;
loginreq.type=String.class;
loginreq.setValue(“”)
+“”+名称+“”
+“”+通过+“”
+“+mImei+”
+"" 
+“+lati+”
+“”+longi+“”
+"" 
+"");
请求。添加属性(loginreq);
。看看链接中的答案

编辑


。请看一下“创建XML”标题。

我遇到了错误:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099).
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);
 }
if (android.os.Build.VERSION.SDK_INT > 9) {
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
  StrictMode.setThreadPolicy(policy);
}

现在它开始工作了。事实上,Android不再允许在主线程上执行网络操作。

我得到了错误:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099).
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);
 }
if (android.os.Build.VERSION.SDK_INT > 9) {
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
  StrictMode.setThreadPolicy(policy);
}

现在它开始工作了。事实上,Android不再允许在主线程上执行网络操作。

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

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

请参考此站点是否有任何错误??atrix-android.os.StrictMode$AndroidLockGuardPolicy.onNetwork(StrictMode.java:1099)请参考此站点是否有任何错误??atrix-android.os.StrictMode$AndroidLockGuardPolicy.onNetwork(StrictMode.java:1099)行响应.put(“HTTPStatus”,httpResponse.getStatusLine().toString());给我一个错误。。。我现在正在修补它。通过向请求添加属性来尝试上面的代码。。代码中的字符串太多。请查看标题“避免创建不必要的对象”下的链接。您的响应也是xml格式的吗。您得到的错误是什么?我希望得到xml格式的响应,但我计划将其作为字符串解析,就像我在ios应用程序中得到响应一样??您现在需要解析该响应??行response.put(“HTTPStatus”,httpResponse.getStatusLine().toString());给我一个错误。。。我现在正在修补它。通过向请求添加属性来尝试上面的代码。。代码中的字符串太多。请查看标题“避免创建不必要的对象”下的链接。您的响应也是xml格式的吗。您得到的错误是什么?我希望得到xml格式的响应,但我计划将其作为字符串解析,就像我在ios应用程序中得到响应一样??你现在需要解析这个响应吗??