Android SoapObject结果在重新调整complexType对象时返回anyType{}作为值

Android 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

我正在我的android应用程序中调用一个web服务&方法是getGramaNiladhariData(), 我得到的结果是SoapObject

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