Android连接webservice的问题 webservice 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WebService 调用的接口 不会写在 Activity 里吧, "屏幕保护之后重新恢复的时候,就显示返回空值" , 这些接口最好写在 子线程 或者 写在 服务里面;你去跟一下, 在屏保之后, 方法是否执行, 把详细的参数都打印出来, webservice是开在子线程里的,进一步测试和屏幕保护没关系,把屏幕常亮,只要等一两分钟,就会返回空值下面是调用webservice的代码: WebServiceUtils.callWebService(server_url, "GetYQSSQYJYInfo2", properties, new WebServiceCallBack() { //WebService接口返回的数据回调到这个方法中 @Override public void callBack(SoapObject result) { if(result != null){ parseSoapObject(result); }else{ Toast.makeText(ssjy.this, "获取数据错误", Toast.LENGTH_SHORT).show(); } } }); WebserviceUtils类代码:public class WebServiceUtils { public static final String WEB_SERVER_URL = "http://192.168.1.36/website/service.asmx"; // 含有3个线程的线程池 private static final ExecutorService executorService = Executors .newFixedThreadPool(3); // 命名空间 private static final String NAMESPACE = "http://tempuri.org/"; /** * * @param url * WebService服务器地址 * @param methodName * WebService的调用方法名 * @param properties * WebService的参数 * @param webServiceCallBack * 回调接口 */ public static void callWebService(String url, final String methodName, HashMap<String, String> properties, final WebServiceCallBack webServiceCallBack) { // 创建HttpTransportSE对象,传递WebService服务器地址 final HttpTransportSE httpTransportSE = new HttpTransportSE(url,5000); // 创建SoapObject对象 SoapObject soapObject = new SoapObject(NAMESPACE, methodName); // SoapObject添加参数 if (properties != null) { for (Iterator<Map.Entry<String, String>> it = properties.entrySet() .iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); soapObject.addProperty(entry.getKey(), entry.getValue()); } } // 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号 final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); // 设置是否调用的是.Net开发的WebService soapEnvelope.setOutputSoapObject(soapObject); soapEnvelope.dotNet = true; httpTransportSE.debug = true; // 用于子线程与主线程通信的Handler final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // 将返回值回调到callBack的参数中 webServiceCallBack.callBack((SoapObject) msg.obj); } }; // 开启线程去访问WebService executorService.submit(new Runnable() { @Override public void run() { SoapObject resultSoapObject = null; try { httpTransportSE.call(NAMESPACE + methodName, soapEnvelope); if (soapEnvelope.getResponse() != null) { // 获取服务器响应返回的SoapObject resultSoapObject = (SoapObject) soapEnvelope.bodyIn; } } catch (HttpResponseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } finally { // 将获取的消息利用Handler发送到主线程 mHandler.sendMessage(mHandler.obtainMessage(0, resultSoapObject)); } } }); } /** * * * @author xiaanming * */ public interface WebServiceCallBack { public void callBack(SoapObject result); }} 跟了一下代码,发现在这一句上会出错if (soapEnvelope.getResponse() != null) 捕捉到异常会跳到catch (IOException e) 错误为java.net.SocketException: sendto failed: ECONNRESET(Connection reset by peer)在网上查是说频繁连接端口被占用,每次要关闭连接我该怎么做啊 那个系统被改装过吧,每个1分钟cpu进行休眠状态,会关闭Connection 用闹钟alarmmanager 唤醒CPU, 不让它休眠 ExpandableListView背景 键名不固定的JSON数据该怎么取值 有谁研究过“水果忍者”和“植物大战僵尸”的实现么? c程序使用自己的库老是提示链接错误 如何判断线程结束?急急急 几十k的字符串本地怎么存储,SharedPreferences可以吗 ExpandableListView的时间监听问题 在手机上获取wifi强度的方法有哪些?谢谢! 请问android能对手机内存进行读写吗? 安卓开发使用的语言和java语言是什么关系? 想做个在线升级,前辈们给个思路? 如何通过蓝牙打印图片?
下面是调用webservice的代码:
WebServiceUtils.callWebService(server_url, "GetYQSSQYJYInfo2", properties, new WebServiceCallBack() {
//WebService接口返回的数据回调到这个方法中
@Override
public void callBack(SoapObject result) {
if(result != null){
parseSoapObject(result);
}else{
Toast.makeText(ssjy.this, "获取数据错误", Toast.LENGTH_SHORT).show();
}
}
});
public class WebServiceUtils {
public static final String WEB_SERVER_URL = "http://192.168.1.36/website/service.asmx";
// 含有3个线程的线程池
private static final ExecutorService executorService = Executors
.newFixedThreadPool(3);
// 命名空间
private static final String NAMESPACE = "http://tempuri.org/"; /**
*
* @param url
* WebService服务器地址
* @param methodName
* WebService的调用方法名
* @param properties
* WebService的参数
* @param webServiceCallBack
* 回调接口
*/
public static void callWebService(String url, final String methodName,
HashMap<String, String> properties,
final WebServiceCallBack webServiceCallBack) {
// 创建HttpTransportSE对象,传递WebService服务器地址
final HttpTransportSE httpTransportSE = new HttpTransportSE(url,5000);
// 创建SoapObject对象
SoapObject soapObject = new SoapObject(NAMESPACE, methodName); // SoapObject添加参数
if (properties != null) {
for (Iterator<Map.Entry<String, String>> it = properties.entrySet()
.iterator(); it.hasNext();) {
Map.Entry<String, String> entry = it.next();
soapObject.addProperty(entry.getKey(), entry.getValue());
}
} // 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号
final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 设置是否调用的是.Net开发的WebService
soapEnvelope.setOutputSoapObject(soapObject);
soapEnvelope.dotNet = true;
httpTransportSE.debug = true; // 用于子线程与主线程通信的Handler
final Handler mHandler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 将返回值回调到callBack的参数中
webServiceCallBack.callBack((SoapObject) msg.obj);
} }; // 开启线程去访问WebService
executorService.submit(new Runnable() { @Override
public void run() {
SoapObject resultSoapObject = null;
try {
httpTransportSE.call(NAMESPACE + methodName, soapEnvelope);
if (soapEnvelope.getResponse() != null) {
// 获取服务器响应返回的SoapObject
resultSoapObject = (SoapObject) soapEnvelope.bodyIn;
}
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} finally {
// 将获取的消息利用Handler发送到主线程
mHandler.sendMessage(mHandler.obtainMessage(0,
resultSoapObject));
}
}
});
} /**
*
*
* @author xiaanming
*
*/
public interface WebServiceCallBack {
public void callBack(SoapObject result);
}}
if (soapEnvelope.getResponse() != null)
捕捉到异常会跳到
catch (IOException e)
错误为
java.net.SocketException: sendto failed: ECONNRESET(Connection reset by peer)在网上查是说频繁连接端口被占用,每次要关闭连接
我该怎么做啊