解决android开发webservice的发布与数据库连接的问题
由于app后续开发的需要,移植了两次webservice和数据库,遇到了不少问题,也花费了很多时间,实践告诉我要学会寻找问题的根源,这样才能在开发中节省时间,尽快解决问题!好,废话不多说,转入正题……
首先该应用时采用第三方类库ksoap2来实现Android与C#版的webservice之间的连接的,它是一个SOAP Web service客户端开发包,网上无论是C#版的webservice还是J2EE版的,一般都是通过ksoap2(准确地说是ksoap2 android)来实现两者间的连接的,至于具体怎样连接就不多说了,给个Android的webservice相关开发的开发汇总(感谢eoe的朋友):http://www.eoeandroid.com/thread-169417-1-1.html
然后说下第一次移植时遇到的一个非常坑爹的问题,移植到新的服务器后,测试一直发现在解析返回的数据,总是显示
SoapObject userInfo = (SoapObject) envelope.bodyIn;
userInfo = (SoapObject) envelope.getResponse();
的返回类型错误,不能强制转换SoapObject类型(具体什么错忘记了),然后又查找相关的错误,一直改,最后才发现是命名空间与webservice的不对应,而导致之后的系列错误。
ksoap2连接webservice的部分代码:
package cn.edu.stu.VillageMarket.utils; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException; /**
*
* @author Navy_iFanr
*
*/
public class LinkerUtils {
private String URL;
private String NAMESPACE = "http://192.168.49.100:8088/";
private String SOAP_ACTION;
private String METHOD_NAME;
private SoapSerializationEnvelope envelope;
private SoapObject rpc;
private HttpTransportSE ht;
// private MyAndroidHttpTransport ht;
private List<HashMap<String, String>> listUserInfo;
private List<HashMap<String, String>> listPublish;
private List<HashMap<String, String>> listComment; public LinkerUtils() {
"http://womenapp.stu.edu.cn/api/cjjs/WebService.asmx";
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
ht = new HttpTransportSE(URL, 80000);
ht.debug = true;
} /*
* 用户注册
*/
public Object setUserRegister(String name, String password, String province, String city, String town,
String country, int state) throws IOException, XmlPullParserException {
METHOD_NAME = "insertNewUser";
// SOAP_ACTION = "http://192.168.13.199:8088/insertNewUser";
// SOAP_ACTION = "http://mt.stu.edu.cn:8088/insertNewUser";
SOAP_ACTION = "http://192.168.49.100:8088/insertNewUser";
rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("uName", name);
rpc.addProperty("uPassword", password);
rpc.addProperty("uProvince", province);
rpc.addProperty("uCity", city);
rpc.addProperty("uTown", town);
rpc.addProperty("uCountry", country);
rpc.addProperty("uState", state);
envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
return (Object) envelope.getResponse(); // Boolean&boolean,唯一只能使用Boolean上的就是从列表或者哈希表获取值时
} /*
* 获取用户状态信息
*/
public List<HashMap<String, String>> getUserInfo() throws IOException, XmlPullParserException {
METHOD_NAME = "selectUserState";
// SOAP_ACTION = "http://192.168.13.199:8088/selectUserState";
// SOAP_ACTION = "http://mt.stu.edu.cn:8088/selectUserState";
SOAP_ACTION = "http://192.168.49.100:8088/selectUserState";
rpc = new SoapObject(NAMESPACE, METHOD_NAME); envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
SoapObject userInfo = (SoapObject) envelope.bodyIn;
userInfo = (SoapObject) envelope.getResponse(); listUserInfo = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < ((SoapObject) userInfo).getPropertyCount(); i += 8) {
HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap.put("uId", userInfo.getProperty(i).toString());
hashMap.put("uName", userInfo.getProperty(i + 1).toString());
hashMap.put("uPassword", userInfo.getProperty(i + 2).toString());
hashMap.put("uProvince", userInfo.getProperty(i + 3).toString());
hashMap.put("uCity", userInfo.getProperty(i + 4).toString());
hashMap.put("uTown", userInfo.getProperty(i + 5).toString());
hashMap.put("uCountry", userInfo.getProperty(i + 6).toString());
hashMap.put("uState", userInfo.getProperty(i + 7).toString());
listUserInfo.add(hashMap);
System.out.println("detail.getProperty(" + i + ")" + ((SoapObject) userInfo).getProperty(i));
}
return listUserInfo;
} }
还有到webservice连接服务器的数据库的问题,主要是连接不上的问题:(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server),遇到这问题详细的解决办法,这个网址都有了,就不多说了,解决SQL Server管理器无法连接远程数据库的问题:http://www.cnblogs.com/jaxu/archive/2010/11/23/1884411.html,如果还是解决不了,那就是服务器本身的问题了,侦听端口没设置好,或其他。
最后,就是webservice的发布问题,在发布前,最好在本机用VS调试好,确定没错后再发布,不然发布后就调试不了了,这样如果之后出错,也可以保证程序本身没错。发布时,配置好iis,如果是新安装的,记得一定要打开允许asp脚本的访问等。
还有,关于与webservice相关的应用,如果wifi能访问,3G网络访问不了,可能是你的服务器发布在内网(你的wifi也处于内网),所以要将发布webservice的端口映射到外网,才能使3G网络能够访问。
问题虽然不是很难,但一折腾,也学到很多东西。
解决android开发webservice的发布与数据库连接的问题的更多相关文章
- 解决Android开发中,ActiveAndroid和Gson同时使用,对象序列化失败的问题
ActiveAndroid是安卓开发常用的ORM框架. Gson则是Google提供的轻量级序列化框架,非常适合Android开发使用. 但这两者同时使用,会产生序列化失败的问题.你通常会收到如下信息 ...
- 从零开始学android开发-项目打包发布
右键项目 选择[android tools]-[export signed application package] 点击[next] 如果没有keystore可以选择[create new keys ...
- 如何解决Android开发中的【java.lang.unsatisfiedlinkerror findLibrary returned null.】 错误
将脉可寻的功能加入到自己的APP中时,需要在libs文件中添加.so文件和jar包 但是,加入.so文件后,仍然报错 在一番折腾之后,终于解决了,然而解决的方法很奇异- -. 在libs下新建一个ar ...
- 源码下载:74个Android开发开源项目汇总
1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...
- Android开发,关于aar你应该知道的
https://yangbo.tech/2015/10/17/all-about-aar/ 背景 在软件工程中,分治是最基本的设计原理,就如同现实中的砖.瓦.钢筋.水泥一样,模块化.组件化的分工,让我 ...
- Android开发——View滑动冲突解决方案
0. 前言 我们在Android开发--事件分发机制详解中深入学习了事件分发机制,为我们解决Android开发中的滑动冲突问题做了初步准备.针对滑动冲突这里给出两种解决方案:外部拦截法和内部拦截法 ...
- Android开发模拟器(虚拟机)的连接等操作
前10天一直在解决android开发环境的问题,我将Androidstudio下载并安装好之后,进入IDE之后,下载AVDmanger中的虚拟机以及SDK等等.之后发现并不能运行虚拟机,根本无法打开虚 ...
- Android 已发行多年,移动 App 已经趋近饱和,那么 Android 开发还会有那么吃香吗?
一.关于Android的前景 不断地也听见很多人在谈做Android是否还有前途.Android研发在走下坡路了.Android的工作太难找了.Android是不是已经凉了...... 对于这些其实我 ...
- 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)
安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04| 分类: 技术 | 标签:安卓 技术 java | ...
随机推荐
- MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载
MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载 武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...
- DenyHosts 安装及配置详解
DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP ...
- oc block基本使用
// // main.m // block基本使用 // // Created by Ymmmsick on 15/7/21. // Copyright (c) 2015年 Ymmmsick. All ...
- jQuery插入节点的方法
注:摘自<锋利的jQuery(第二版)> append() 向每个匹配的元素内部追加内容: HTML代码:<p>我想说:</p>jQuery代码:$(" ...
- C#的DLL注册为COM,Delphi来调用
非常实用的东西!过去知道这个方法的话可以解决多少问题啊 首先建立一个C#的DLL工程,写一个类 //Test.csnamespace Test...{public class MyTest...{pu ...
- 提交(post)xml文件给指定url的2种方法
原文:提交(post)xml文件给指定url的2种方法 1 这段代码是在网上搜到的,拿来共享,项目正好要用到.其中的data你只需要传递一个xml字符串就可以 protected string ...
- 【IOS】在SDK中打开其他接入应用的解决方案
在SDK中打开其他接入应用的解决方案 一直以来,在iOS的开发中,在程序中打开另外一个应用是不允许.后来有正义之士用class-dump在私有API中找到了这样的功能.那就是使用UIApplica ...
- [Oracle] - 性能优化工具(3) - ADDM
ADDM 通过检查和分析AWR获取的数据来推断Oracle数据库中可能的问题.并给出优化建议. 获取ADDM的方法例如以下: @?/rdbms/admin/addmrpt.sql 以下能够看一个样例: ...
- UVA 10163 Storage Keepers(dp + 背包)
Problem C.Storage Keepers Background Randy Company has N (1<=N<=100) storages. Company wants ...
- leetcode之 median of two sorted arrays
这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetc ...