解析对对象数组的kSoap响应

时间:2012-05-01 23:03:52

标签: android arraylist

我的问题是:我有一个SoapObject。我已成功迭代它以找到不同的嵌套元素并将它们保存在一个对象中(我认为?)...

我的代码是:

        if(sResult != null)
        {
            SoapObject soapresults = (SoapObject)sResult.getProperty(0);

            int count = soapresults.getPropertyCount();

            ChildStatus[] children = new ChildStatus[count];

            for (int i = 0; i < count; i++)
            {
                SoapObject kid = (SoapObject)soapresults.getProperty(i);
                ChildStatus childStatus = new ChildStatus();
                SoapObject value = (SoapObject)kid.getProperty("Value");
                SoapObject info = (SoapObject)value.getProperty("Info");

                childStatus.CheckOutPlanned = value.getPropertyAsString("CheckOutPlannedTime");
                childStatus.CurrentStatus = value.getPropertyAsString("CurrentStatus");
                childStatus.FullName = info.getPropertyAsString("FullName");
                childStatus.ID = info.getPropertyAsString("Id");
                childStatus.KindergardenID = info.getPropertyAsString("KindergardenId");
                childStatus.URL = info.getPropertyAsString("ThumbnailUrl");

                String pickUpBy = value.getPropertyAsString("PickUpBy");


                if(pickUpBy.equalsIgnoreCase("anyType{}"))
                {
                    System.out.println("Ja");
                    pickUpBy = "none";
                } else if(pickUpBy.equalsIgnoreCase("En anden forælder"))
                {
                    childStatus.PickUpWithKidID = value.getPropertyAsString("PickUpWithKidId");
                    childStatus.PickUpWithKidName = value.getPropertyAsString("PickUpWithKidName");
                }

                childStatus.PickUpBy = value.getPropertyAsString("PickUpBy");

                children[i] = childStatus;
            }

            System.out.println("Size: " + children.length);

我的对象是:

public class ChildStatus implements KvmSerializable 
{
    public String CheckOutPlanned;
    public String CurrentStatus;
    public String FullName;
    public String ID;
    public String KindergardenID;
    public String URL;
    public String PickUpBy;
    public String PickUpWithKidID;
    public String PickUpWithKidName;

    public ChildStatus(){}

    public ChildStatus(String checkOutPlanned, String currentStatus, String fullName, String id, String kindergardenID, String url, String pickUpBy, String pickUpWithKidID, String pickUpWithKidName)
    {
        CheckOutPlanned = checkOutPlanned;
        CurrentStatus = currentStatus;
        FullName = fullName;
        ID = id;
        KindergardenID = kindergardenID;
        URL = url;
        PickUpBy = pickUpBy;
        PickUpWithKidID = pickUpWithKidID;
        PickUpWithKidName = pickUpWithKidName;
    }

    public Object getProperty(int arg0) {
        // TODO Auto-generated method stub
        switch(arg0)
        {
        case 0:
            return CheckOutPlanned;
        case 1:
            return CurrentStatus;
        case 2:
            return FullName;
        case 3:
            return ID;
        case 4:
            return KindergardenID;
        case 5:
            return URL;
        case 6:
            return PickUpBy;
        case 7:
            return PickUpWithKidID;
        case 8:
            return PickUpWithKidName;
        }

        return null;
    }

    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return 9;
    }

    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
        // TODO Auto-generated method stub
        switch(index)
        {
        case 0:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "CheckOutPlanned";
            break;
        case 1:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "CurrentStatus";
            break;
        case 2:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "FullName";
            break;
        case 3:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "ID";
            break;
        case 4:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "KindergardenID";
            break;
        case 5:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "URL";
            break;
        case 6:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "PickUpBy";
            break;
        case 7:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "PickUpWithKidID";
            break;
        case 8:
            info.type = PropertyInfo.STRING_CLASS;
            info.name = "PickUpWithKidName";
            break;
        default:
            break;
        }
    }

    public void setProperty(int index, Object value) {
        // TODO Auto-generated method stub
        switch(index)
        {
        case 0:
            CheckOutPlanned = value.toString();
            break;
        case 1:
            CurrentStatus = value.toString();
            break;
        case 2:
            FullName = value.toString();
            break;
        case 3:
            ID = value.toString();
            break;
        case 4:
            KindergardenID = value.toString();
            break;
        case 5:
            URL = value.toString();
            break;
        case 6:
            PickUpBy = value.toString();
            break;
        case 7:
            PickUpWithKidID = value.toString();
            break;
        case 8:
            PickUpWithKidName = value.toString();
            break;
        default:
            break;
        }
    }

}

现在我如何在类中使用对象数组?

我在某个地方看到,我需要做这样的事情:

ArrayList<MyClass> myList = new ArrayList<MyClass>();

myList.add( new MyClass() );

myList.get( 0 ).myMethodFromMyClass();

所以在我的情况下:

ArrayList<ChildStatus> myChild = new ArrayList<ChildStatus>();
myChild.add( new ChildStatus() );
myChild.get(0).??

但是我觉得我可能会在这里错误的方向,因为.add听起来我正在添加一个新对象,而不是我在网络电话中找到的那些......

在iOS中我通常使用:

Status *theStatus = [statusConnection.statusArray objectAtIndex:i];

从对象数组中获取对象,但我对Android很新...

我真的很感激你能给我的任何帮助!

1 个答案:

答案 0 :(得分:0)

我很难理解你真正想做的事情。

// Get rid of the table
REMOVE ChildStatus[] children = new ChildStatus[count]; 

// Create the ArrayList
ArrayList<ChildStatus> myChild = new ArrayList<ChildStatus>();  

for (int i = 0; i < count; i++) 
{   
    ChildStatus childStatus = new ChildStatus(); 

    ...
    HERE YOU POPULATE YOUR childStatus OBJECT WITH THE SOAPOBJECT
    ...

    // Add objects built from SOAPObject to the ArrayList
    myChild.add(childStatus);

    // The table is of no matter here 
    REMOVE children[i] = childStatus; 
} 

// Use inner methods from an element of the ArrayList (here the number of properties for the first element)
myChild.get(0).getPropertyCount()

我可能会被你提出的问题误导,如果这不是你想要的,那就很抱歉。