Android SoapObject结果在重新调整complexType对象时返回anyType{}作为值
我正在我的android应用程序中调用一个web服务&方法是getGramaNiladhariData(), 我得到的结果是SoapObjectAndroid SoapObject结果在重新调整complexType对象时返回anyType{}作为值,android,android-ksoap2,Android,Android Ksoap2,我正在我的android应用程序中调用一个web服务&方法是getGramaNiladhariData(), 我得到的结果是SoapObject result = (SoapObject) envelope.bodyIn; Log.d("WS", String.valueOf(result)); 这就是我从String.valueOf(result) GetGramaniladHaridatResponse{GetGramaniladHaridatResult=anyTy
result = (SoapObject) envelope.bodyIn; Log.d("WS", String.valueOf(result));
这就是我从String.valueOf(result)
GetGramaniladHaridatResponse{GetGramaniladHaridatResult=anyType{gnName=anyType{};address=anyType{};workingDays=anyType{};gnDivision=anyType{};contactNumber=anyType{};}
这里我调用的方法返回一个complexType对象,由5个属性组成。
正如我在internet上发现的那样,我无法获取返回complexType对象的webservice方法的结果soap对象。如果是,我应该如何获取值
我想解决的是为什么我得到anyType{},作为值,而不是实际值。
任何帮助都将不胜感激现在回答太晚了。但仅供参考,以及其他认为这很有用的人 通过执行
String.valueOf(result)
可以打印正文的全部内容。但为了使用参数获取值,首先需要输入以更正SoapObject
我不知道是否有任何简单的方法可以找到正确的SoapObject
,但还是用这种方法,一旦你得到正确的SoapObject
,你就完成了。在下面查找如何找到正确的SoapObject
result.getPropertyCount();
首先,您需要检查第一个SoapObject
中的参数计数
result.getPropertyCount();
因为这是第一个封面,所以你会得到更少的计数
然后,打印并查看哪个参数提供了正确的详细信息
result.getProperty(0);
result.getProperty(1);
etc ...
找到正确的参数后,抓取该SoapObject
。像这样,
SoapObject result2 = (SoapObject) result.getProperty(0);
SoapObject result3 = (SoapObject) result2.getProperty(5);
Log.v("Name : ", result3.getProperty("gnName").toString());
然后检查此对象的计数。并执行与上面相同的操作,直到获得正确的SoapObject
找到最后一个SoapObject
后,它将像这样打印,没有无用的字符串
anyType{gnName = Prasad; address = Address of the person; ; workingDays = 5; gnDivision = California; contactNumber = 0123456789}
现在你可以像这样处理这个物体
SoapObject result2 = (SoapObject) result.getProperty(0);
SoapObject result3 = (SoapObject) result2.getProperty(5);
Log.v("Name : ", result3.getProperty("gnName").toString());
您将获得DDMS的输出,如下所示
Name : Prasad
我想这会对您有所帮助,如果您还有其他问题,请告诉我。我以前遇到过这个问题。我解决了这个问题。我以前有过这个问题。我解决了这个问题。我似乎花了很多时间来解决这个问题。我的项目是工作。我创建了Web服务.Net对象数组。我希望这对你有帮助
//.................................
SoapObject requestx = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelopex = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelopex.dotNet = true;
envelopex.setOutputSoapObject(requestx);
HttpTransportSE httpTransportx = new HttpTransportSE(URL);
try {
httpTransportx.call(SOAP_ACTION, envelopex);
SoapObject responsex = (SoapObject)envelopex.getResponse(); // not envelopex.bodyIn;
int i=0;
int RCount=responsex.getPropertyCount();
int[] tbIDArray = new int[RCount+1];
int[] iMonthAarray = new int[RCount+1];
int[] iYearAarray = new int[RCount+1];
String[] sDetailAarray = new String[RCount+1];
for (i = 0; i < RCount; i++) {
Object property = responsex.getProperty(i);
if (property instanceof SoapObject) {
SoapObject info = (SoapObject) property;
String tbID = info.getProperty("tbID").toString();
String iMonth = info.getProperty("iMonth").toString();
String iYear = info.getProperty("iYear").toString();
String sDetail = info.getProperty("sDetail").toString();
tbIDArray[i] =Integer.valueOf(tbID);
iMonthAarray[i] =Integer.valueOf(iMonth);
iYearAarray[i] =Integer.valueOf(iYear);
sDetailAarray[i] =sDetail;
}//if (property instanceof SoapObject) {
}//for (i = 0; i < RCount; i++) {
} catch (Exception exception) {
MsgBox1(exception.toString() , "Error");
}
/。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
SoapObject requestx=新的SoapObject(名称空间、方法名称);
SOAPSerializationEnvelopex=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelopex.dotNet=true;
envelopex.setOutputSoapObject(requestx);
HttpTransportSE httpTransportx=新的HttpTransportSE(URL);
试试{
调用(SOAP_操作,envelopex);
SoapObject responsex=(SoapObject)envelopex.getResponse();//不是envelopex.bodyIn;
int i=0;
int RCount=responsex.getPropertyCount();
int[]tbIDArray=新的int[RCount+1];
int[]iMonthAarray=新的int[RCount+1];
int[]iYearAarray=新的int[RCount+1];
字符串[]sDetailAarray=新字符串[RCount+1];
对于(i=0;i
当您从web服务获取空值时,anytype{}会出现。请先插入一些数据,然后尝试从web服务获取数据。我自己编写代码,我刚刚完成它,我想与您共享它,它可以帮助您吗
我只和一张桌子一起工作,那就是和我一起工作
我将尝试解释这些步骤
try {
// Invole web service
androidHttpTransport.call(SOAP_ACTION + "mywebservicecall", envelope);
// Get the response
SoapObject resultsString = (SoapObject) envelope.getResponse();
//resultsString looks like this ==> anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyT....etc
//here i found some complex in getproperty(0) so i not need it
//then i make Object1 that contain datatable from my database getproperty(1)
SoapObject Object1 = (SoapObject) resultsString.getProperty(1);
//object1 look like this ==> anyType{NewDataSet=anyType{Table1=anyType{ID_CAT=1; CAT_V_N=ma
//here my table1 i wanna to fitch the NewDataSet
SoapObject tables = (SoapObject) Object1.getProperty(0); //NewDataset
//tables object now looks like this ==> anyType{Table1=anyType{ID_CAT=1;CAT_N ...etc
//now i wanna loop in my table to get columns valus it will be tablesObject properties depend on iteration to get row by row
for (int i = 0; i < tables.getPropertyCount(); i++) {
SoapObject Objecttable = (SoapObject) tables.getProperty(i);
System.out.println("ID_CAT = " + Objecttable.getProperty("ID_CAT").toString());
System.out.println("CAT_N= " +Objecttable.getProperty("CAT_N").toString());
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("ID_CAT = 0 ");
System.out.println("CAT_N = None");
}
试试看{
//发票web服务
调用(SOAP_操作+“mywebservicecall”,信封);
//得到回应
SoapObject resultsString=(SoapObject)envelope.getResponse();
//resultsString看起来像这样==>anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyT….等等
//在这里,我在getproperty(0)中发现了一些复杂的内容,因此我不需要它
//然后我从数据库getproperty(1)生成包含datatable的Object1
SoapObject对象1=(SoapObject)resultsString.getProperty(1);
//object1看起来像这样==>anyType{NewDataSet=anyType{Table1=anyType{ID\u CAT=1;CAT\u V\u N=ma
//这是我的表1我想对新数据集进行惠誉
SoapObject表=(SoapObject)Object1.getProperty(0);//NewDataset
//tables对象现在看起来像这样==>anyType{Table1=anyType{ID\u CAT=1;CAT\N…等等
//现在,我想在我的表中循环以获取列值,这将是TableObject属性依靠迭代逐行获取
对于(int i=0;i