我正在尝试从 Android 应用程序调用 asmx Web 服务。今天刚刚开始一些 Android 开发。我一直在关注在网上和此处找到的各种解决方案,这似乎比预期的更困难。我尝试了各种解决方案,使用 KSoap2 似乎是实现此目的最简单的方法,如果我能让它工作的话那就太好了。
我有以下代码,可以一直工作到一定程度:
private class CallWebService extends AsyncTask<Void, Void, Void> {
private static final String SOAP_ACTION = "http://tempuri.org/GetUser";
private static final String METHOD_NAME = "GetUser";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://160.10.1.79:59315/Service1.asmx";
TextView tv;
@Override
protected Void doInBackground(Void... params) {
tv=(TextView)findViewById(R.id.txtMessage);
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = (Object)envelope.getResponse();
tv.setText(result.toString());
}
catch (Exception e) {
tv.setText(e.getMessage());
}
return null;
}
}
它似乎卡在了 androidHttpTransport.call(SOAP_ACTION, Envelope);
行上,有什么想法吗?这是正确的方法吗?我应该转向另一个方向吗?
最佳答案
tv.setText(result.toString());
完全不建议从doInBackground
访问UI。
doInBackground
会自动将结果传递给 onPostExecute
,您可以在那里设置文本
protected void onPostExecute(String result){
tv.setText(result.toString());
}
关于java - 从 Android 应用程序调用 Web 服务似乎挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805541/