6

Android アプリで Web サービスを呼び出しています。メソッドは getGramaNiladhariData() です。結果を SoapObject として取得しています。

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

そして、これは String.valueOf(result)で得たものです

getGramaNiladhariDataResponse{getGramaNiladhariDataResult=anyType{gnName=anyType{}; アドレス=anyType{}; workingDays=anyType{}; gnDivision=anyType{}; contactNumber=anyType{}; }; }

ここで呼び出しているメソッドは、5 つの属性で構成される complexType オブジェクトを返します。インターネットで見つけたように、complexType オブジェクトを返す Web サービス メソッドの結果として SOAP オブジェクトを取得できません。

私が解決したいのは、実際の値ではなく、値として anyType{} を取得している理由です。どんな助けでもいただければ幸いです

4

4 に答える 4

6

答えるには遅すぎる。しかし、参考までに、これが役立つと思う他の人は、

実行することにより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

これでお役に立てると思いますが、他に問題がありましたらお知らせください。

于 2012-11-01T09:50:27.820 に答える
2

anytype{} は、Web サービスから null 値を取得したときに発生します。最初にデータを挿入してから、Web サービスからデータを取得しようとします。

于 2014-08-05T04:42:26.907 に答える
2

私は独自のコードを作成しました。今完成したばかりです。それをあなたと共有したいと思います。

私は1つのテーブルだけで作業していましたが、それは私と一緒に作業していました。手順を説明しようと思います

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

最後のコードは 1 つのテーブルを説明します

今私が終わったのは、マルチテーブルを制御する方法です

私も説明します

        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) {
            }

幸運を祈ります

于 2018-05-06T15:36:54.560 に答える
-1

私は以前にこの問題を抱えていました。そして、私はそれを解決しました。私は以前にこの問題を抱えていました。そして、私はそれを解決しました。この問題の解決策を見つけるのに多くの時間を費やしたようです。私のプロジェクトは仕事です。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");
        }
于 2013-03-31T19:57:41.010 に答える