package com.example.gramaniladharidetails;
import java.util.Vector;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.Marshal;
import org.ksoap2.serialization.MarshalFloat;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class GramaNiladhari extends Activity {
private static String SOAP_ACTION1= "http://localhost/getGramaNiladhariData";
private static String NAMESPACE = "http://119.235.4.217/";
private static String METHOD_NAME1 = "getGramaNiladhariData";
private static String URL = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grama_niladhari);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final String gndLifeCode = prov;
String LifeCode = "3-2-09-060";
request.addProperty("gndLifeCode", LifeCode);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
SupportThread st = new SupportThread();
Log.i("Request", request.toString());
st.execute(request);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_grama_niladhari, menu);
return true;
}
private class SupportThread extends
AsyncTask<SoapObject, Object, SoapObject> {
@Override
protected SoapObject doInBackground(SoapObject... req) {
SoapObject result = null;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(req[0]);
envelope.addMapping(NAMESPACE, "SerializeInfo",
new SerializeInfo().getClass());
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
envelope.dotNet = true;
try {
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION1, envelope);
SoapObject result = (SoapObject) envelope.getResponse();
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).faultstring;
Log.i("*******", str);
} else {
int elementCount = result.getPropertyCount();
if (elementCount > 0) {
String element;
for (int i = 0; i < elementCount; i++) {
element = result.getProperty(i).toString();
Log.d("This is an element", Integer.toString(i)
+ " --" + element);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(SoapObject result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result != null) {
String response_name = result.getName();
TextView tv = (TextView) findViewById(R.id.textView5);
tv.setText(result.getProperty(0).toString());
}
else {
Toast.makeText(getApplicationContext(), "No Response",
Toast.LENGTH_LONG).show();
}
}
}}
我所调用的webservice方法重新运行了一个名为complexType的GramaNiladhari对象。它由5种字符串类型组成。当我运行这段代码时,我会得到以下SoapObject结果。
anyType{gnName=anyType{}; address=anyType{}; workingDays=anyType{}; gnDivision=anyType{}; contactNumber=anyType{}; } 但是这里我缺少了值,它们被替换为anyType{}。我怎样才能找回真正的价值呢?
,我编辑了我的问题。。
这是XML中解析的请求。
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body>
<getGramaNiladhariData xmlns="http://119.235.4.217/GNService/">
<gndLifeCode i:type="d:string">1-1-21-065</gndLifeCode>
</getGramaNiladhariData></v:Body></v:Envelope>这是调用web服务后的结果。
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <getGramaNiladhariDataResponse xmlns="http://localhost/"> <getGramaNiladhariDataResult><gnName /><address /><workingDays /><gnDivision /><contactNumber /></getGramaNiladhariDataResult></getGramaNiladhariDataResponse></soap:Body></soap:Envelope>检查请求时,请求似乎传递得很好(甚至请求参数gndLifeCode的值也是正确的,1-1-21-065 )。
但是响应是null.All,我需要检索的元素有空标记。
这可能是web服务中的一个问题吗?我在SoapUI中检查了这个web服务&它在那里工作得很好(甚至在SoapClient中也是如此)。却不知道这是怎么回事?
发布于 2012-09-12 06:14:08
很抱歉,我不是Android开发人员,所以我不能给你确切的答案,但我可以给你一些提示,我的观点出了什么问题
希望您的请求没有那么酷,我想服务器可以理解您的请求。
,我认为你的要求是类似于这个
REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/">
<SOAP-ENV:Body>
<ns1:getGramaNiladhariData/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>,所以它返回这个
stdClass Object
(
[getGramaNiladhariDataResult] => stdClass Object
(
[gnName] =>
[address] =>
[workingDays] =>
[gnDivision] =>
[contactNumber] =>
)
),所以您的请求必须类似于这个
REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/">
<SOAP-ENV:Body>
<ns1:getGramaNiladhariData>
<ns1:gndLifeCode>3-2-09-060</ns1:gndLifeCode>
</ns1:getGramaNiladhariData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>然后你会得到确切的答案
并确保您的xmln标记(如ns1、SOAP-ENV (在我的示例中)是相同的),以检查我建议使用soap的标记。
凉爽的
发布于 2012-09-12 06:12:43
进口:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;Web服务:
/*web service parameters*/
private static final String TAG = SearchResultFragment.class.getSimpleName();
private static final String SOAP_ACTION = "http://tempuri.org/GetMethod";
private static final String METHOD_NAME = "GetMethod";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://127.0.0.1/App_Services/service.asmx";我就是这么用的..。
private SoapObject CallWebServiceDemo() {
SoapObject result = null;
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.implicitTypes = true;
envelope.dotNet = true;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
result = (SoapObject) envelope.getResponse();
} catch (Exception ex) {
Log.e(TAG, ex.getMessage());
}
return result;
}发布于 2014-01-18 06:57:57
使用它将输出更改为xml格式:
httpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
httpTransport.call(SOAP_ACTION, soapEnvelope);
String resultString = httpTransport.responseDump;https://stackoverflow.com/questions/12375998
复制相似问题