ag凯发k8国际
收集整理的这篇文章主要介绍了
android通过webservice连接sql数据库(二)客户端
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
上文写好了webservice并且可以通过自己写的接口成功操作sqlsever,接下来就要完成客户端与服务器端的交流,获取数据转化成xml文件传给客户端。要想让客户端与服务器端进行交流必须满足几个前提:
1、webservice调试成功并且能访问数据库。
2、成功发布webservice与本地iis,并且能够在iis上浏览网站
3、手机(同网络)能够访问网站。
androidstudio代码:httpconnsoap
import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;import java.net.httpurlconnection;import java.net.url;import java.util.arraylist;public class httpconnsoap {public arraylist
getwebservre(string methodname, arraylist parameters, arraylist parvalues) {arraylist values = new arraylist();//serverurl是指webservice的url//10.0.2.2是让android模拟器访问本地(pc)服务器,不能写成127.0.0.1//11125是指端口号,即挂载到iis上的时候开启的端口//service1.asmx是指提供服务的页面
// string serverurl = "http://192.168.43.202/tourismweb/tourismservice.asmx";string serverurl = "http://192.168.174.2/tourismweb/tourismservice.asmx";//string soapaction="http://tempuri.org/longuserid1";string soapaction = "http://tempuri.org/" methodname;//string data = "";string soap = "" "" "";string tps, vps, ts;string mreakstring = "";mreakstring = "<" methodname " xmlns=\"http://tempuri.org/\">";for (int i = 0; i < parameters.size(); i ) {tps = parameters.get(i).tostring();//设置该方法的参数为.net webservice中的参数名称vps = parvalues.get(i).tostring();ts = "<" tps ">" vps "";mreakstring = mreakstring ts;}mreakstring = mreakstring "";/* "" "string11661" "string111" ""*/string soap2 = "";string requestdata = soap mreakstring soap2;//system.out.println(requestdata);try {url url = new ;httpurlconnection con = (httpurlconnection) url.openconnection();byte[] bytes = requestdata.getbytes("utf-8");con.setdoinput(true);con.setdooutput(true);con.setusecaches(false);con.setconnecttimeout(12000);// 设置超时时间con.setrequestmethod("post");con.setrequestproperty("content-type", "text/xml;charset=utf-8");con.setrequestproperty("soapaction", soapaction);con.setrequestproperty("content-length", "" bytes.length);outputstream outstream = con.getoutputstream();outstream.write(bytes);outstream.flush();outstream.close();inputstream instream = con.getinputstream();//data=parser(instream);//system.out.print("11");values = inputstreamtovaluelist(instream, methodname);//system.out.println(values.size());} catch (exception e) {system.out.print("2221");}return values;}public arraylist inputstreamtovaluelist(inputstream in, string monthsname) throws ioexception {stringbuffer out = new stringbuffer();string s1 = "";byte[] b = new byte[4096];arraylist values = new arraylist();values.clear();for (int n; (n = in.read(b)) != -1;) {s1 = new string(b, 0, n);out.append(s1);}system.out.println(out);string[] s13 = out.tostring().split("><");string ifstring = monthsname "result";string ts = "";string vs = "";boolean getvalueboolean = false;for (int i = 0; i < s13.length; i ) {ts = s13[i];system.out.println(ts);int j, k, l;j = ts.indexof(ifstring);k = ts.lastindexof(ifstring);if (j >= 0) {system.out.println(j);if (getvalueboolean == false) {getvalueboolean = true;} else {}if ((j >= 0) && (k > j)) {system.out.println("fff" ts.lastindexof("/" ifstring));//system.out.println(ts);l = ifstring.length() 1;vs = ts.substring(j l, k - 2);//system.out.println("fff" vs);values.add(vs);system.out.println("退出" vs);getvalueboolean = false;return values;}}if(ts.equals("string /")){values.add(" "); continue;}if(ts.equals("string/")){values.add(" "); continue;}if (ts.lastindexof("/" ifstring) >= 0) {getvalueboolean = false;return values;}if ((getvalueboolean) && (ts.lastindexof("/" ifstring) < 0) && (j < 0)) {k = ts.length();//system.out.println(ts);vs = ts.substring(7, k - 8);//system.out.println("f" vs);values.add(vs);}}return values;}}
这个类可以直接用,作用就是把连接服务器,把webservice上写的函数的返回值转化为数组类型 arrarylist。
参数说明: methodname:调用的函数名,这个就是要调用webservice上的函数名
parameters:数组,数组每个元素是对应函数的参数名,要求参数名一致。
parvalues:数组,数组每个元素是对应参数的值。
要改的地方只用一处,就是serverurl,根据自己webservice的url改动。
其中服务器返回的是如下字符串,存放在变量 out 中:
我们所要做的就是获取有用的数据,(蓝色字体string会被替换成实际值),也就是 方法名 “result” 标签 之间的数据。
通过字符串截取,将获取出来的数据存放在变量values中并返回。但是不能成功获取复杂值。
使用httpconnsoap的实例代码如下:
类2:dbutil,使用
import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;import java.net.httpurlconnection;import java.net.url;import java.util.arraylist;public class dbutil {private arraylist arraylist = new arraylist();private arraylist brraylist = new arraylist();private arraylist crraylist = new arraylist();private httpconnsoap soap = new httpconnsoap();//region 用户注册/**phonenum,name,sex,password,isguide*/public boolean insertuser(string phonenum, string name,string sex ,string password,string address,string isguide) {arrayliststrings=new arraylist();boolean flag=false;arraylist.clear();brraylist.clear();arraylist.add("phonenum");arraylist.add("name");arraylist.add("sex");arraylist.add("password");arraylist.add("address");arraylist.add("isguide");brraylist.add(phonenum);brraylist.add(name);brraylist.add(sex);brraylist.add(password);brraylist.add(address);brraylist.add(isguide);strings=soap.getwebservre("insertuser", arraylist, brraylist);if(strings.get(0)=="true");flag=true;return flag;}//endregion//region 账号密码是否匹配验证/**账号密码是否匹配验证,phonenum,password*/public boolean ismatchuser(string phonenum, string password){arrayliststrings=new arraylist();boolean flag=false;arraylist.clear();brraylist.clear();arraylist.add("phonenum");arraylist.add("password");brraylist.add(phonenum);brraylist.add(password);string a;strings= soap.getwebservre("ismatchuser", arraylist, brraylist);if(strings!=null){a =strings.get(0);if(a.equals("true"))flag=true;}return flag;}//endregion/**根据phone找用户信息*/public list> selectuserbyid (string phonenum){list> list = new arraylist>();arraylist.clear();brraylist.clear();crraylist.clear();arraylist.add("phonenum");brraylist.add(phonenum);crraylist = soap.getwebservre("selectuserbyid", arraylist, brraylist);hashmap temphash = new hashmap();temphash.put("phonenum", "phonenum");temphash.put("name", "name");temphash.put("sex", "sex");temphash.put("password", "password");temphash.put("isguide", "isguide");temphash.put("address", "address");temphash.put("signature","signature");list.add(temphash);for (int j = 0; j < crraylist.size(); j = 7) {hashmap hashmap = new hashmap();hashmap.put("phonenum", crraylist.get(j));hashmap.put("name", crraylist.get(j 1));hashmap.put("sex", crraylist.get(j 2));hashmap.put("password", crraylist.get(j 3));hashmap.put("isguide", crraylist.get(j 4));hashmap.put("address",crraylist.get(j 5));hashmap.put("signature",crraylist.get(j 6));list.add(hashmap);}return list;}
}
成员: arraylist:存放调用函数的参数名
brrarylist:存放调用函数的参数值
crrarylist:存放服务器的返回值。
最后crrarylist会把对应值存放在hashmap数组中。使用dbutil类例子: new dbutil().ismatchuser( phonenum);
要注意的几点:
1、该类用到访问网络,所以要在androidmanifest 添加访问网络的权限
android:name="android.permission.internet"/> 2、不能再主线程中访问网络,访问网络需要开启新的线程。可以用handle类来完成主线程与子线程之间的交流。
参考:http://blog.csdn.net/zhyl8157121/article/details/8169172;
总结
以上是ag凯发k8国际为你收集整理的android通过webservice连接sql数据库(二)客户端的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。