0

この問題には多くの時間がかかり、解決策がわからないため、誰かが私を助けてくれることを願っています. thx かなり前もって ... 次のようなオブジェクトを返す AXIS2-Webservice を呼び出そうとします。

public class TestObject{

private int zahl = 1;
private String name = "test";
SecondObject sec_object = new SecondObject("eins");
List <SecondObject> obj_list = new ArrayList<SecondObject>();
static SecondObject [] array;

public TestObject(){
    obj_list.add(new SecondObject("zwei"));
    obj_list.add(new SecondObject("drei"));
    array = obj_list.toArray(new SecondObject[2]); }
    //getter & setter

public class SecondObject {

private String wert;

public SecondObject(String wert) {
    this.wert = wert;
}

Android からは、次のように呼び出します。

androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();

int count = response.getPropertyCount();
        Log.v(TAG, "count :"+count);
        for (int y = 0; y < count; y++){
            if (response.getProperty(y)instanceof SoapObject){
                SoapObject sobj = (SoapObject) response.getProperty(y);
                Log.v(TAG, "soapOBJ "+sobj);
                Log.v(TAG, "count "+sobj.getPropertyCount());
                if (sobj.getProperty(0)!= null){
                    Log.v(TAG, "!=NULL"+sobj.getProperty(0)+"");
                }   
            }
        }

SoapObject array = (SoapObject) response.getProperty("array");
Log.v(TAG, "array "+array);

オブジェクトの配列のみを呼び出す多くの投稿を見ました。この場合、オブジェクトの配列を含むオブジェクトを呼び出したいと思います... 問題は: 配列には 1 つの要素しか含まれていません。このログを参照してください:

09-05 14:58:31.120: V/ASYNCTASK(9314): count :7
09-05 14:58:31.120: V/ASYNCTASK(9314): soapOBJ SecondObject{wert=zwei; }
09-05 14:58:31.120: V/ASYNCTASK(9314): count 1
09-05 14:58:31.120: V/ASYNCTASK(9314): !=NULLzwei
09-05 14:58:31.120: V/ASYNCTASK(9314): soapOBJ SecondObject{wert=drei; }
09-05 14:58:31.120: V/ASYNCTASK(9314): count 1
09-05 14:58:31.120: V/ASYNCTASK(9314): !=NULLdrei
09-05 14:58:31.120: V/ASYNCTASK(9314): soapOBJ SecondObject{wert=zwei; }
09-05 14:58:31.120: V/ASYNCTASK(9314): count 1
09-05 14:58:31.120: V/ASYNCTASK(9314): !=NULLzwei
09-05 14:58:31.120: V/ASYNCTASK(9314): soapOBJ SecondObject{wert=drei; }
09-05 14:58:31.120: V/ASYNCTASK(9314): count 1
09-05 14:58:31.120: V/ASYNCTASK(9314): !=NULLdrei
09-05 14:58:31.120: V/ASYNCTASK(9314): soapOBJ SecondObject{wert=eins; }
09-05 14:58:31.120: V/ASYNCTASK(9314): count 1
09-05 14:58:31.120: V/ASYNCTASK(9314): !=NULLeins
09-05 14:58:31.120: V/ASYNCTASK(9314): array SecondObject{wert=zwei; }
4

1 に答える 1

0

SoapObject次のように、トップレベルから個々のノードを取得できます。

SoapObject response = (SoapObject) envelope.getResponse();
String name =  response.getPrimitivePropertySafelyAsString(NODE_NAME_FOR_NAME /* e.g. "name"? */);
int zahl = Integer.parseInt(response.getPrimitivePropertySafelyAsString(NODE_NAME_FOR_ZAHL /* e.g. "zahl"? */));
SoapObject obj_list = (SoapObject) response.getPropertySafely("obj_list");
for (int idx = 0; idx < obj_list.getPropertyCount(); idx++) {
    SoapObject secondObject = (SoapObject) forecastResultsNode.getProperty(idx);

    String wert=  forecastNode.getPrimitivePropertySafelyAsString("wert");
}

より具体的な回答を提供できるように、実際の SOAP 応答のスニペット (XML 形式) を投稿していただければ幸いです。

説明した構造に似た応答を解析する例は、このブログ記事にあります。

于 2012-10-16T01:25:17.043 に答える