Android:以编程方式创建和发送XML SOAP请求
你好,先谢谢你。我找到了这个教程,我正在尝试模仿它:。在我的iOS应用程序中,我能够创建具有xml属性的字符串,将其作为SOAP请求发送,并以字符串形式获得xml响应。我正试图用我的android应用程序做同样的事情 不幸的是有些东西不起作用。我已附上相关代码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
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应用程序中得到响应一样??你现在需要解析这个响应吗??