您是Android java开发的新手,我正在尝试从我的android java应用程序调用java webservice。当我试图运行这个应用程序时,我得到一个异常,说明android.os.NetworkOnMainThreadException。我不知道为什么会出现这个错误.. ??无论如何我都遇到了这个错误。我已经google了很多,但无法找到一个确切的解决方案..任何人都可以帮助..?我的代码片段在下面。
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,envelope);
SoapObject so = (SoapObject)envelope.bodyIn;
完成调试后,我认为这些代码行androidHttpTransport.call(SOAP_ACTION,envelope);
SoapObject so = (SoapObject)envelope.bodyIn;
正在出现问题。
代码envelope.bodyIn
给我一个空值。
答案 0 :(得分:2)
您可以使用AsyncTask,这可以防止创建自己的线程的麻烦。在doInBackGround方法中进行网络调用
代码
public void onClick(View v) {
new DownloadImageTask().execute(data);
}
class Data {
String namespace;
String method;
}
private class DownloadImageTask extends AsyncTask<data, Void, SoapObject> {
protected SoapObject doInBackground(Data... data) {
//make your network call and return SoapObject
}
protected void onPostExecute(SoapObject obj) {
//process the Soap Object returned
}
}
答案 1 :(得分:1)
您可以使用dot net Webservice,因此您可以添加请求.net true
以下SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
//在此添加此行
envelope.dotNet = true;
//然后你的代码
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
//为调试添加此内容
HttpTransportSE.debug = true; //this is optional, use it if you don't want to use a packet sniffer to check what the sent message was (httpTransport.requestDump)
//作为您的代码
androidHttpTransport.call(SOAP_ACTION,envelope);
SoapObject so = (SoapObject)envelope.bodyIn;
添加该行后,您的请求成功完成..接受答案并Upvote
答案 2 :(得分:0)
您需要在其他线程上启动网络请求。该请求将阻止您的主线程,这将降低应用程序的响应能力。请参阅exception documentation。另一个链接告诉您标准方法。
从此link
建议的方法是创建子线程并完成大部分操作 你的工作在那里。这保留了主线程(驱动用户 接口事件循环)运行并阻止系统结束 您的代码已冻结。因为这种线程通常是 在课堂上完成,您可以将响应能力视为一种 阶级问题。 (将此与基本性能进行比较,即 以上描述的方法级问题。)