在Android中显示SOAP服务结果

时间:2016-02-19 10:57:18

标签: android exception soap

我有一个基本表AndroidTestDb的数据库UserTable。我还有一个.Net,基于SOAP的Web服务WebServiceOne。 Web服务有一个方法ServiceQueryOne(),它返回一个字符串数组,其中包含从表UserTable中检索到的值。 该服务工作正常,但我正在努力检索SOAP值并在Android列表视图中显示值。

请参阅Web服务方法:     公共类WebServiceOne:System.Web.Services.WebService {

public WebServiceOne()
{
    //Uncomment the following line if using designed components 
    //InitializeComponent(); 
}

[WebMethod]
public string[] ServiceQueryOne()
{
    List<DataClass> dataList = new List<DataClass>(); ;
    GetData gd = new GetData();        
    string query = "SELECT Name,Surname,Password FROM UserTable";
    dataList = gd.setDataList(query);
    int listCount = dataList.Capacity;
    int i = 0;
    string[] stringList = new string[listCount];
    foreach(object value in dataList)
    {
        stringList[i] = dataList[i].toString();
        i++;
    }
//returns a string 
    return stringList;
}

Service returned result

<LinearLayout
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true">
            <ListView
            android:id="@+id/lvResult"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"/>
</LinearLayout>

我的Android中还有一个Web服务类来处理SOAP对象的传递:

public class WebServiceClass {
String URL = "http://localhost:54079/WebServiceOne.asmx";
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME;
String SOAP_ACTION;

SoapObject request;

public SoapObject WebServiceMethodOne() {
    METHOD_NAME = "ServiceQueryOne";
    SOAP_ACTION = "http://tempuri.org/ServiceQueryOne";
    request = new SoapObject(NAMESPACE, METHOD_NAME);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);
    envelope.dotNet = true;

    try {
        HttpTransportSE androiHttpTransport = new HttpTransportSE(URL);
        androiHttpTransport.call(SOAP_ACTION, envelope);
        SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
        request = (SoapObject) envelope.bodyIn;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return request;
}

在我的主要活动中,我声明了列表视图和一个带有onClick侦听器的搜索按钮(应该)填充列表。

onClickListener搜索按钮:

        searchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v){
            OnSearchButtonClick();
        }
    });

OnSearchButtonClick方法:

public void OnSearchButtonClick(){
    SoapObject serviceData = soapService.WebServiceMethodOne();
    String getData = serviceData.getPropertyAsString(0);
    resultListView.setAdapter(dataAdapter);
    dataAdapter.add(getData);  
    }

在我的OnCreate方法中,我设置了我的Web服务类,并链接了列表视图对象。上面的DataAdapter在onCreate方法之前声明:

soapService = new WebServiceClass();
resultListView = (ListView) findViewById(R.id.lvResult);

结果是一个例外:

FATAL EXCEPTION: main Process: com.example.csiwele.testwebapp_one, PID: java.lang.ArrayIndexOutOfBoundsException: length=0; index=at java.util.Vector.arrayIndexOutOfBoundsException

OnSearchButtonClick方法抛出异常:

String getData = serviceData.getPropertyAsString(0);

虽然我仍在尝试修复此异常,但我不确定这是否会解决在列表视图中实际显示SOAP对象数据的问题。我仍然对将SOAP对象传递给Android应用程序的概念不熟悉,而我正在努力进一步理解,我觉得这对我目前面临的特定问题有所帮助。请查看我提供的内容,并就如何使此代码运行提出建议。

0 个答案:

没有答案