我wondring如何使用香皂obejct摆脱WCF服务器数据 [英] I was wondring how to get data from WCF server using soap obejct
问题描述
我希望有人解决我的问题。我几乎用3天,以解决这个问题...
首先,这是网址: http://www.w3schools.com/webservices/tempconvert的.asmx?WSDL
下面是我的全code
包com.webservice;进口org.ksoap2.SoapEnvelope;
进口org.ksoap2.serialization.SoapObject;
进口org.ksoap2.serialization.SoapPrimitive;
进口org.ksoap2.serialization.SoapSerializationEnvelope;
进口org.ksoap2.transport.HttpTransportSE;
进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.os.AsyncTask;
进口android.util.Log; 公共类MainActivity扩展活动{ / **当第一次创建活动调用。 * / 私有静态最后弦乐SOAP_ACTION1 =http://www.w3schools.com/webServices/FahrenheitToCelsius; 私有静态最后弦乐SOAP_ACTION2 =http://www.w3schools.com/webservices/CelsiusToFahrenheit; 私有静态最后弦乐NAMESPACE =http://www.w3schools.com/webservices/; 私有静态最后弦乐METHOD_NAME1 =FahrenheitToCelsius; 私有静态最后弦乐METHOD_NAME2 =CelsiusToFahrenheit; 私有静态最终字符串URL =http://www.w3schools.com/webservices/tempconvert.asmx?WSDL; 私人按钮btnFar,btnCel,btnClear; 私人的EditText txtFar,txtCel; 私人字符串响应; @覆盖 公共无效的onCreate(捆绑savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity_main); btnFar =(按钮)findViewById(R.id.btnFar); btnCel =(按钮)findViewById(R.id.btnCel); btnClear =(按钮)findViewById(R.id.btnClear); txtFar =(EditText上)findViewById(R.id.txtFar); txtCel =(EditText上)findViewById(R.id.txtCel); btnFar.setOnClickListener(新View.OnClickListener()
{ @覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
myAsyncTask myRequest =新myAsyncTask();
myRequest.execute();
}
});} 私有类myAsyncTask扩展的AsyncTask<太虚,太虚,太虚>
{
@覆盖
保护无效onPostExecute(虚空结果){
super.onPostExecute(结果);
txtFar.setText(响应);
txtCel.setText(响应);
} @覆盖
在preExecute保护无效(){
super.on preExecute();
} @覆盖
保护无效doInBackground(虚空......为arg0)
{
SoapObject要求=新SoapObject空间(namespace,METHOD_NAME1);
request.addProperty(华氏,txtFar.getText()的toString()); SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = TRUE;
envelope.setOutputSoapObject(请求);
HttpTransportSE androidHttpTransport =新HttpTransportSE(URL); 尝试{
androidHttpTransport.call(SOAP_ACTION1,信封); SoapPrimitive结果=(SoapPrimitive)envelope.getResponse(); 如果(结果!= NULL)
{
Log.d(应用程序,+ result.getAttribute(2)的ToString());
响应= result.getAttribute(1)的ToString();
}
其他{}
}赶上(例外五){ e.printStackTrace(); }
返回null;
}
}
}
当我调试这个code,我觉得有连接的android以http因为
没问题 androidHttpTransport.call(SOAP_ACTION1,信封); < ---我可以通过这条线。
然而,这code后,错误被引起的。
SoapPrimitive结果=(SoapPrimitive)envelope.getResponse();
的SOAPFault - 故障code:香皂:客户端faultstring:服务器不承认HTTP头SOAPAction的价值:
http://www.w3schools.com/webServices/FahrenheitToCelsius 。 faultactor:
'空'的细节:org.kxml2.kdom.Node@42a91d88
块引用>我试过其他code这样的。
SoapObject结果=(SoapObject)envelope.getResponse();
SoapObject结果=(SoapObject)envelope.bodyIn();我猜测数据类型与此问题相关的。
所以,请检查我的code和网址,我写previously
解决方案下面是详细信息,可以帮助您非常好的例子。
我希望这会帮助你。
I hope anybody solve my problem. I'm almost using 3 days to solve this problem...
Firstly this is URL : http://www.w3schools.com/webservices/tempconvert.asmx?WSDL
Below is my full code
package com.webservice; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.os.AsyncTask; import android.util.Log; public class MainActivity extends Activity { /** Called when the activity is first created. */ private static final String SOAP_ACTION1 = "http://www.w3schools.com/webServices/FahrenheitToCelsius"; private static final String SOAP_ACTION2 = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; private static final String NAMESPACE = "http://www.w3schools.com/webservices/"; private static final String METHOD_NAME1 = "FahrenheitToCelsius"; private static final String METHOD_NAME2 = "CelsiusToFahrenheit"; private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; private Button btnFar,btnCel,btnClear; private EditText txtFar,txtCel; private String response; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnFar = (Button)findViewById(R.id.btnFar); btnCel = (Button)findViewById(R.id.btnCel); btnClear = (Button)findViewById(R.id.btnClear); txtFar = (EditText)findViewById(R.id.txtFar); txtCel = (EditText)findViewById(R.id.txtCel); btnFar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myAsyncTask myRequest = new myAsyncTask(); myRequest.execute(); } }); } private class myAsyncTask extends AsyncTask<Void, Void, Void> { @Override protected void onPostExecute(Void result) { super.onPostExecute(result); txtFar.setText(response); txtCel.setText(response); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... arg0) { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1); request.addProperty("Fahrenheit",txtFar.getText().toString()); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { androidHttpTransport.call(SOAP_ACTION1, envelope); SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); if(result != null) { Log.d("App",""+result.getAttribute(2).toString()); response=result.getAttribute(1).toString(); } else{} } catch (Exception e) { e.printStackTrace(); } return null; } }
}
When I debug this code, I think there was no problem connecting android with http because
androidHttpTransport.call(SOAP_ACTION1, envelope); <--- I can pass this line.
However after this code, error was caused.
SoapPrimitive result=(SoapPrimitive)envelope.getResponse();
SoapFault - faultcode: 'soap:Client' faultstring: 'Server did not recognize the value of HTTP Header SOAPAction: http://www.w3schools.com/webServices/FahrenheitToCelsius.' faultactor: 'null' detail: org.kxml2.kdom.Node@42a91d88
I tried other code like this.
SoapObject result=(SoapObject)envelope.getResponse(); SoapObject result=(SoapObject)envelope.bodyIn();
I guess data type is related with this problem.
So please check my code and URL that I wrote previously
解决方案Here is very nice example in details which can help you
I hope this will help you .
这篇关于我wondring如何使用香皂obejct摆脱WCF服务器数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!