【发布时间】:2014-11-25 07:49:15
【问题描述】:
我要做的是在 ASP.NET 中创建一个简单的 Web 服务,并通过该 Web 服务从 MSSQL 服务器获取数据,并在我的 android 应用程序中使用该数据。作为一个新手,我已经尝试了这个Helpful 链接来关注。我使用了与本教程建议的架构相同的架构。但是在我的结果中解析结果(Soap Response)时出错。如下。
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <soap:Body><findContactResponse xmlns="http://tempuri.org/" />
> </soap:Body> </soap:Envelope>
GetPropertyCount() 方法返回 0,另一方面,arrayindexoutofBound 错误出现索引 0。
这是我的活动代码。我在哪里实现了异步任务以便于处理。
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION = "http://tempuri.org/findContact";
private static final String OPERATION_NAME = "findContact";// your webservice web method name
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://10.0.2.2:58497/WebService/Service.asmx?wsdl";//"http://127.0.0.1:58497/WebService/Service.asmx";
protected static final String TAG = null;
TextView tvData1;
EditText edata;
Button button;
String studentNo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvData1 = (TextView)findViewById(R.id.textView1);
edata =(EditText)findViewById(R.id.editText1);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
studentNo=edata.getText().toString();
new Submit().execute(studentNo);
}
});
}
private class Submit extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(String... arg) {
// TODO Auto-generated method stub
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
PropertyInfo propertyInfo = new PropertyInfo();
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "eid";
Log.e("studentNo", studentNo);
request.addProperty(propertyInfo);
request.addProperty("eid", studentNo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
httpTransport.debug = true;
try {
httpTransport.call(SOAP_ACTION, envelope);
Log.e("Dump", httpTransport.responseDump.toString());
SoapObject result=(SoapObject)envelope.bodyIn;
if(result!= null){
Log.e("response", result.toString());
//To get the data.
System.out.println("********Count : "+ result.getPropertyCount());
String resultData=result.getProperty(0).toString();
Log.e("Found", resultData);
}
else{
Log.e("Obj", result.toString());
}
}
catch (Exception exception) {
Log.e("Not Found", exception.toString());
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
}
现在谁能告诉我我出了什么问题?或者我怎样才能毫无例外地得到我的回应?调试后,我想出了这条正在创建异常的行。
String resultData=result.getProperty(0).toString();
感谢任何形式的帮助。
【问题讨论】:
-
programmingjungle.blogspot.com/2013/05/… 他们要么是疯子,要么是在 Android 上找到了一种简单的肥皂方法
-
这对我帮助不大。我正在寻找在数据解析时出现 araayindexOutofBound 错误时该怎么办?或者我需要做什么才能从 Soap Response @Anthony 解析数据
标签: android asp.net web-services soap