title: kSoap2 Android -- Cast Class Exception (SoapObject)
body: <p>I'm currently trying to retrieve an array from my webservice by using regular Ksoap implementation. However, when trying to access this array I am getting the following logcat error:</p>
  
  <pre><code> 04-27 00:27:01.772: ERROR/AndroidRuntime(530): Caused by: java.lang.RuntimeException: Unable to 
   start activity ComponentInfo{android.waiter/android.waiter.TablesActivity}: 
   java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive
  </code></pre>
  
  <p>It appears that for some reason Soap is not getting along with the way I am casting my property values. Attached is the problem code (and related methods)</p>
  
  <pre><code>public static TableDTO[] RetrieveFromSoap(SoapObject soap)
  {
      TableDTO[] tables = new TableDTO[soap.getPropertyCount()];
      for (int i = 0; i &lt; tables.length-1; i++) {
          SoapObject pii = (SoapObject) soap.getProperty(i);
          TableDTO table = new TableDTO();
          table.setTableID(Integer.parseInt(pii.getProperty(0).toString())); 
          table.setCapacity(Integer.parseInt(pii.getProperty(1).toString()));
          table.setStatusFlag(pii.getProperty(2).toString());
          table.setCurrentWaiter(pii.getProperty(3).toString());
          tables[i] = table;
      }
      return tables;
  }
  </code></pre>
  
  <p>TableDTO Information:</p>
  
  <pre><code> @Override
  public Object getProperty(int arg0) {
      switch(arg0)
      {
      case 0:
          return TableID;
      case 1:
          return Capacity;
      case 2:
          return StatusFlag;
      case 3:
          return currentWaiter;
      }
      return null;
  }
  
  @Override
  public int getPropertyCount() {
      // TODO Auto-generated method stub
      return 3;
  }
  
  @Override
  public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo info) {
      switch(arg0){
      case 0:
          info.type = PropertyInfo.INTEGER_CLASS;
          info.name = "TableID";
          break;
      case 1:
          info.type = PropertyInfo.INTEGER_CLASS;
          info.name = "Capacity";
          break;
      case 2:
          info.type = PropertyInfo.STRING_CLASS;
          info.name = "StatusFlag";
          break;
      case 3:
          info.type = PropertyInfo.INTEGER_CLASS;
          info.name = "currentWaiter";
          break;
  default:break;
      }       
  
  }
  
  @Override
  public void setProperty(int arg0, Object value) {
      switch(arg0)
      {
      case 0:
          TableID = Integer.parseInt(value.toString());
          break;
      case 1:
          Capacity = Integer.parseInt(value.toString());
          break;
      case 2:
          StatusFlag = value.toString();
          break;
      case 3:
          currentWaiter = value.toString();
          break;
      default :
          break;
  
      }
  
  }
  </code></pre>
  
  <p>The problem is with the line</p>
  
  <pre><code> SoapObject pii = (SoapObject) soap.getProperty(i);
  </code></pre>
  
  <p>It does not like the casting there. I'm at a loss on how to fix this.</p>
  
  <p>Thanks for your time and help!</p>