Результат SoapObject возвращает anyType{} в качестве значения при перенастройке объекта complexType.

Я вызываю веб-службу в своем приложении для Android, и метод getGramaNiladhariData(), я получаю результат как SoapObject.

result = (SoapObject) envelope.bodyIn;  Log.d("WS", String.valueOf(result));

И вот что я получил для String.valueOf(result)

getGramaNiladhariDataResponse{getGramaNiladhariDataResult=anyType{gnName=anyType{}; адрес = любой тип {}; рабочие дни = любой тип {}; gnDivision=любой тип{}; номер_контакта=любойТип{}; }; }

Здесь метод, который я вызываю, возвращает объект complexType, состоящий из 5 атрибутов. Как я обнаружил в Интернете, я не могу получить мыльный объект в результате метода веб-сервиса, который возвращает объект сложного типа. Если да, то как мне получить значения.

Я хочу решить, почему я получаю anyType{} в качестве значения вместо реального значения. Любая помощь будет оценена


person erandi    schedule 09.09.2012    source источник
comment
erandi, ты разобрался с этой проблемой? Я пробовал несколькими способами и все еще в том же положении   -  person Priyan RockZ    schedule 03.09.2013
comment
в базе данных ваша ячейка пуста, поэтому вы получаете anyType{}, если она равна нулю, столбец будет недоступен в строке мыла, в любом случае, когда вы зацикливаете столбец как ответ ниже вы можете установить напр. if(table.getProperty(ID).toString().equals(anyType{})){ x = }else{x=table.getProperty(ID).toString()} , в противном случае, если столбец не находится в строке результата, он будет быть обнулено в ячейке базы данных, и это может привести к сбою вашего запроса веб-службы, и вам нужно будет настроить его с помощью этого if(table.hasProperty(ID)){x=table.getProperty(ID).toString()}else{x= }   -  person Hassan Badawi    schedule 09.05.2019


Ответы (4)


Слишком поздно отвечать. но FYI и другие, кто находит это полезным,

Выполняя String.valueOf(result), вы печатаете все содержимое тела. но для того, чтобы получить свои значения с помощью параметров, в первую очередь вам нужно нажать, чтобы исправить SoapObject.

Я не знаю, есть ли какой-нибудь простой способ найти правильный SoapObject, но тем не менее этот способ помогает, и как только вы получите правильный SoapObject, все готово. ниже найдите, как найти правильный SoapObject,

Сначала вам нужно проверить количество параметров в самом первом SoapObject,

result.getPropertyCount();

вы получите меньшее количество очков за это, так как это самая первая обложка,

затем распечатайте и посмотрите, какой параметр дает вам правильные данные,

result.getProperty(0);
result.getProperty(1);
etc ...

Как только вы нашли правильный параметр, возьмите этот файл SoapObject. как это,

SoapObject result2 = (SoapObject) result.getProperty(0);

затем проверьте количество этого объекта. и делайте то же самое, что и выше, пока не получите правильный SoapObject.

Как только вы найдете последнее SoapObject, оно будет напечатано без бесполезных строк,

anyType{gnName = Prasad; address = Address of the person; ; workingDays = 5; gnDivision = California; contactNumber = 0123456789}

Теперь вы можете продолжить работу с этим объектом следующим образом:

SoapObject result3 = (SoapObject) result2.getProperty(5);
Log.v("Name : ", result3.getProperty("gnName").toString());

И вы получите вывод в DDMS, как показано ниже,

Name : Prasad

Я думаю, это поможет вам, дайте мне знать, если у вас возникнут дополнительные проблемы.

person Prasad De Zoysa    schedule 01.11.2012

anytype{} возникает, когда вы получаете нулевое значение от веб-службы. Сначала вставьте некоторые данные, а затем попытайтесь получить данные из веб-службы.

person Community    schedule 05.08.2014

я делаю собственный код, я только что закончил его сейчас, я хотел бы поделиться им с вами, может это поможет кому-то

я работал только с одной таблицей, и это была работа со мной, и я попытаюсь объяснить шаги

    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");
    } 

последний код объясняет одну таблицу

теперь я только что закончил, как управлять несколькими столами

я тоже объясню

        SoapObject resultsString = (SoapObject) envelope.getResponse(); 
        // the same
        SoapObject Object1 = (SoapObject) resultsString.getProperty(1); 
        // the same
        SoapObject tables = (SoapObject) Object1.getProperty(0); 
        // the same


        // the same
        for(int i = 0; i < tables.getPropertyCount(); i++){
            SoapObject Objecttable = (SoapObject) (SoapObject) tables.getProperty(i);

            try{ 

//tables.toString().substring(8,tables.toString().indexOf("=")).equals("Table1")
   // here i was try to get the name of the table to hundel it but i fount my table name in attribute id 
   // it not came as table name like if my table that comming from database is hi
   //the first row will be attrib=>id=>hi1 and sec row will be hi2 
   //the first row will be attrib=>rowOrder=>0 and sec row will be 1 
                    if(Objecttable.getAttribute("id").equals("Table1"+(Integer.valueOf(Objecttable.getAttribute("rowOrder").toString())+1))){
// so Objecttable.getAttribute("id") will be ( "Table11" ) in first row
//Objecttable.getAttribute("rowOrder").toString() ==> will be 0

//Integer.valueOf(Objecttable.getAttribute("rowOrder").toString())+1) well be 1 for first row of this table

// so Objecttable.getAttribute("id").equals("Table1"+(Integer.valueOf(Objecttable.getAttribute("rowOrder").toString())+1)) will be true 
/**
then i can loop and fitch data like single table 
*/
                }

                if(Objecttable.getAttribute("id").equals("Table2"+(Integer.valueOf(Objecttable.getAttribute("rowOrder").toString())+1))){

                }
            }catch (Exception e) {
            }

надеюсь вам все понятно, удачи

person Hassan Badawi    schedule 06.05.2018

У меня была эта проблема раньше. И я решил это. У меня была эта проблема раньше. И я решил это. Казалось, я потратил много времени, чтобы найти решение этой проблемы. Мой проект это работа. Я создаю массив объектов Web Service .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");
        }
person mahasam    schedule 31.03.2013