I’m trying to print a array returned by a aspx webservice onto an android TextView. I actually can read the data in the text view with the following android an C# aspx code. But the problem is that when I print the output its in the format:
anyType{string="Shean";string="Ya";string="Hey";} and not
Shean Ya & Hey
So I decided to read the array as follows:
for (int i = 0; i < intPropertyCount; i++) {
SoapObject responseChild = (SoapObject) response.getProperty(i);
int lengthOfResponseChild = responseChild.getPropertyCount();
for (int j = 0; j < lengthOfResponseChild; j++) {
//Error Highlight is as responseChild[j]
result.setText(responseChild[j].toString());
}
//Used this line and prints output on a textView as anyType{string="Shean";string="Ya";string="Hey";}
//result.setText(responseChild.toString());
}
However there is a error highlighted at
result.setText(responseChild[j].toString());
which states The type of the expression must be an array type but it resolved to SoapObject
my complete android code is as follows:
package com.example.fp1_webservicedropdown;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;
import android.widget.TextView;
import org.ksoap2.*;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.*;
public class MainActivity extends Activity {
TextView result;
Spinner spinnerC;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinnerC = (Spinner) findViewById(R.id.spinner1);
result = (TextView) findViewById(R.id.textView2);
final String NAMESPACE = "http://sample.com/";
final String METHOD_NAME = "GetCustomerList";
final String SOAP_ACTION = "http://sample.com/GetCustomerList";
final String URL = "http://myLocalIP/HelloWorldNew/Service1.asmx";
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(Request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
try {
aht.call(SOAP_ACTION, soapEnvelope);
SoapObject response = (SoapObject) soapEnvelope.bodyIn;
int intPropertyCount = response.getPropertyCount();
for (int i = 0; i < intPropertyCount; i++) {
SoapObject responseChild = (SoapObject) response.getProperty(i);
int lengthOfResponseChild = responseChild.getPropertyCount();
for (int j = 0; j < lengthOfResponseChild; j++) {
//Error Highlight is as responseChild[j]
result.setText(responseChild[j].toString());
}
//Used this line and prints output on a textView as anyType{string="Shean";string="Ya";string="Hey";}
//result.setText(responseChild.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
My complete asp web method code is as follows:
[WebMethod]
public string[] GetCustomerList()
{
//substitute code to actually populate the array with the dataset data
string[] personIds = { "Shean", "Ya", "Hey" };
return personIds;
}
responseChild is an instance of SoapObject, but you are trying to use array access syntax on it.
If you are trying to iterate over the properties in responseChild, SoapObject has the method getProperty(int index)
Using this, your loop would look as follows: