我有一个基本表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;
}
<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应用程序的概念不熟悉,而我正在努力进一步理解,我觉得这对我目前面临的特定问题有所帮助。请查看我提供的内容,并就如何使此代码运行提出建议。