Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

http://blog.csdn.net/zhyl8157121/article/details/8169172

本文为原创,如果转载请注明出处 http://blog.csdn.net/zhyl8157121/article/details/8169172

其实之前发过一篇这样的博文http://blog.csdn.net/zhyl8157121/article/details/7709552, 但那个只是简单记录了一些自己的想法,并没有想作为教程来看,后来由于一些朋友想要源代码,就附上了下载地址,但并没有做什么讲解,从现在开始,准备做一 份详细的Android如何连接Sqlserver的教程.由于本人才疏学浅,如果有什么不对的地方欢迎大家批评指正.

        为了避免再次被说标题党,这里先说明些事情:

        第一,android没法直接连接SQLServer,起码我没有发现方法,想想看,sqlserver安装之后有多大,android程序是跑在手机上的,想让程序直接访问sqlserver,那手机要多大的内存?

        第二,本文是通过一个“桥梁”——webservice来间接访问SQLServer的,当然还有其他方法,感兴趣的同学可以自行百度。

        如果理解了上面两点,好了咱们继续。


教程会拿一个具体的例子来讲,一步一步来,也许细节上还可以继续加工,但大致的流程就是这样的。

本教程有五个部分:

  • 项目说明
  • 开发环境部署
  • 数据库设计
  • 服务器端程序设计
  • 客户端(android端)程序设计

项目说明

这个项目意在实现一个简单的android连接Sqlserver的功能。

就做一个简单的库存管理功能,包括对仓库内现有货物的查看、货物信息的增加&删除。

开发环境的部署

今天主要讲解第一个部分,开发环境的部署.

操作系统:Windows764bit 旗舰版

当然这个是什么基本无所谓,只是我是在这上面开发的,不过家庭普通版的貌似不能配置IIS,就是咱们后面要使用的一个服务.

android端:eclipse + ADT集成开发环境

相信看到这个教程的基本都知道如何做这些了.如果真的是有哪位同学android开发环境没有配置好而来看这篇教程,请先移步->www.google.com

服务器端:VisualStudio 2010
旗舰版

这个是用来写website/webservice的,开发语言使用C# (即.net)

数据库:SQLServer2008 R2

其实这个是什么版本也无所谓吧,教程使用的都是比较基本的东西,所以版本的差异基本可以忽略。

IIS 7.5:正确配置并开启IIS服务

如果想将website/webservice发布出去就要开启这个服务。但是如果仅仅是在本地进行测试就不需要配置,直接在VS中运行就可以。

其实我在开发的时候也只是配置IIS的时候遇到了一些问题,这里给出IIS的配置方法.

http://wenku.baidu.com/view/95cf9fd9ad51f01dc281f1af.html这篇文库给的还是很详细的,我当初就是照着这个配置的。

数据库设计

数据库名称:StockManage

表设计

表名称:C

表说明:

列名

中文名称

数据型态

必填

说明

Cno

货物编号

Int

V

主键,自增

Cname

货物名称

String

Cnum

货物数量

Int

下图是设计表的时候的截图。

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

向表中输入内容

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

吐槽一下:为什么这里猫、狗、电话都有,甚至还有Surface?!这只能说当时LZ在想这些……

服务器端程序设计(Webservice)

其实服务端可以写成webservice也可以写成website,前者只是提供一种服务,而后者是可以提供用户界面等具体的页面,后者也就是咱们平时所说的“网站”。

两者的区别:

  • Web Service 只提供程序和接口,不提供用户界面
  • Web Site 提供程序和接口,也提供用户界面(网页)

由于咱们只是需要一个中介来访问sqlserver,所以写成webservice足够了。

目标:写一个Website访问Sqlserver,获取数据并转换成xml格式,然后传递给android客户端。

1.      新建一个Webservice工程

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

2.      视图 -> 其它窗口 -> 服务器资源管理器

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

3.      右键数据连接 -> 添加连接

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

4.      选择Microsoft Sqlserver

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

5.      如下图所示选择(可以点击测试连接来检测连接是否成功,然后点击确定)

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

6.      数据库的查看和编辑也可以在VS中进行了

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

7.      先查看一下数据库属性并记录下连接属性

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

8.      新建一个类DBOperation,代码如下:

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.HtmlControls;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Xml.Linq;
  12. using System.Data.SqlClient;
  13. using System.Text.RegularExpressions;
  14. using System.Collections;
  15. using System.Collections.Generic;
  16. namespace StockManageWebservice
  17. {
  18. /// <summary>
  19. /// 一个操作数据库的类,所有对SQLServer的操作都写在这个类中,使用的时候实例化一个然后直接调用就可以
  20. /// </summary>
  21. public class DBOperation:IDisposable
  22. {
  23. public static SqlConnection sqlCon;  //用于连接数据库
  24. //将下面的引号之间的内容换成上面记录下的属性中的连接字符串
  25. private String ConServerStr = @"Data Source=BOTTLE-PC;Initial Catalog=StockManage;Integrated Security=True";
  26. //默认构造函数
  27. public DBOperation()
  28. {
  29. if (sqlCon == null)
  30. {
  31. sqlCon = new SqlConnection();
  32. sqlCon.ConnectionString = ConServerStr;
  33. sqlCon.Open();
  34. }
  35. }
  36. //关闭/销毁函数,相当于Close()
  37. public void Dispose()
  38. {
  39. if (sqlCon != null)
  40. {
  41. sqlCon.Close();
  42. sqlCon = null;
  43. }
  44. }
  45. /// <summary>
  46. /// 获取所有货物的信息
  47. /// </summary>
  48. /// <returns>所有货物信息</returns>
  49. public List<string> selectAllCargoInfor()
  50. {
  51. List<string> list = new List<string>();
  52. try
  53. {
  54. string sql = "select * from C";
  55. SqlCommand cmd = new SqlCommand(sql,sqlCon);
  56. SqlDataReader reader = cmd.ExecuteReader();
  57. while (reader.Read())
  58. {
  59. //将结果集信息添加到返回向量中
  60. list.Add(reader[0].ToString());
  61. list.Add(reader[1].ToString());
  62. list.Add(reader[2].ToString());
  63. }
  64. reader.Close();
  65. cmd.Dispose();
  66. }
  67. catch(Exception)
  68. {
  69. }
  70. return list;
  71. }
  72. /// <summary>
  73. /// 增加一条货物信息
  74. /// </summary>
  75. /// <param name="Cname">货物名称</param>
  76. /// <param name="Cnum">货物数量</param>
  77. public bool insertCargoInfo(string Cname, int Cnum)
  78. {
  79. try
  80. {
  81. string sql = "insert into C (Cname,Cnum) values ('" + Cname + "'," + Cnum + ")";
  82. SqlCommand cmd = new SqlCommand(sql, sqlCon);
  83. cmd.ExecuteNonQuery();
  84. cmd.Dispose();
  85. return true;
  86. }
  87. catch (Exception)
  88. {
  89. return false;
  90. }
  91. }
  92. /// <summary>
  93. /// 删除一条货物信息
  94. /// </summary>
  95. /// <param name="Cno">货物编号</param>
  96. public bool deleteCargoInfo(string Cno)
  97. {
  98. try
  99. {
  100. string sql = "delete from C where Cno=" + Cno;
  101. SqlCommand cmd = new SqlCommand(sql, sqlCon);
  102. cmd.ExecuteNonQuery();
  103. cmd.Dispose();
  104. return true;
  105. }
  106. catch (Exception)
  107. {
  108. return false;
  109. }
  110. }
  111. }
  112. }

9.      修改Service1.asmx.cs代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Services;
  6. namespace StockManageWebservice
  7. {
  8. /// <summary>
  9. /// Service1 的摘要说明
  10. /// </summary>
  11. [WebService(Namespace = "http://tempuri.org/")]
  12. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  13. [System.ComponentModel.ToolboxItem(false)]
  14. // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
  15. // [System.Web.Script.Services.ScriptService]
  16. public class Service1 : System.Web.Services.WebService
  17. {
  18. DBOperation dbOperation = new DBOperation();
  19. [WebMethod]
  20. public string HelloWorld()
  21. {
  22. return "Hello World";
  23. }
  24. [WebMethod(Description = "获取所有货物的信息")]
  25. public string[] selectAllCargoInfor()
  26. {
  27. return dbOperation.selectAllCargoInfor().ToArray();
  28. }
  29. [WebMethod(Description = "增加一条货物信息")]
  30. public bool insertCargoInfo(string Cname, int Cnum)
  31. {
  32. return dbOperation.insertCargoInfo(Cname, Cnum);
  33. }
  34. [WebMethod(Description = "删除一条货物信息")]
  35. public bool deleteCargoInfo(string Cno)
  36. {
  37. return dbOperation.deleteCargoInfo(Cno);
  38. }
  39. }
  40. }

10.      运行程序(F5),会自动打开一个浏览器,可以看到如下画面:

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

11.  选择相应的功能并传递参数可以实现调试从浏览器中调试程序:

下图选择的是增加一条货物信息

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

12.  程序执行的结果:

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

13.另,记住这里的端口名,后面android的程序中添入的端口号就是这个:

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

客户端(android端)程序设计

程序代码:

1.MainActivity

  1. package com.bottle.stockmanage;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import android.app.Activity;
  6. import android.app.Dialog;
  7. import android.os.Bundle;
  8. import android.view.Gravity;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.Window;
  12. import android.view.WindowManager;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.ListView;
  16. import android.widget.SimpleAdapter;
  17. import android.widget.Toast;
  18. public class MainActivity extends Activity{
  19. private Button btn1;
  20. private Button btn2;
  21. private Button btn3;
  22. private ListView listView;
  23. private SimpleAdapter adapter;
  24. private DBUtil dbUtil;
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29. btn1 = (Button) findViewById(R.id.btn_all);
  30. btn2 = (Button) findViewById(R.id.btn_add);
  31. btn3 = (Button) findViewById(R.id.btn_delete);
  32. listView = (ListView) findViewById(R.id.listView);
  33. dbUtil = new DBUtil();
  34. btn1.setOnClickListener(new OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. hideButton(true);
  38. setListView();
  39. }
  40. });
  41. btn2.setOnClickListener(new OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. hideButton(true);
  45. setAddDialog();
  46. }
  47. });
  48. btn3.setOnClickListener(new OnClickListener() {
  49. @Override
  50. public void onClick(View v) {
  51. hideButton(true);
  52. setDeleteDialog();
  53. }
  54. });
  55. }
  56. /**
  57. * 设置弹出删除对话框
  58. */
  59. private void setDeleteDialog() {
  60. final Dialog dialog = new Dialog(MainActivity.this);
  61. dialog.setContentView(R.layout.dialog_delete);
  62. dialog.setTitle("输入想要删除的货物的编号");
  63. Window dialogWindow = dialog.getWindow();
  64. WindowManager.LayoutParams lp = dialogWindow.getAttributes();
  65. dialogWindow.setGravity(Gravity.CENTER);
  66. dialogWindow.setAttributes(lp);
  67. final EditText cNoEditText = (EditText) dialog.findViewById(R.id.editText1);
  68. Button btnConfirm = (Button) dialog.findViewById(R.id.button1);
  69. Button btnCancel = (Button) dialog.findViewById(R.id.button2);
  70. btnConfirm.setOnClickListener(new OnClickListener() {
  71. @Override
  72. public void onClick(View v) {
  73. dbUtil.deleteCargoInfo(cNoEditText.getText().toString());
  74. dialog.dismiss();
  75. hideButton(false);
  76. Toast.makeText(MainActivity.this, "成功删除数据", Toast.LENGTH_SHORT).show();
  77. }
  78. });
  79. btnCancel.setOnClickListener(new OnClickListener() {
  80. @Override
  81. public void onClick(View v) {
  82. dialog.dismiss();
  83. hideButton(false);
  84. }
  85. });
  86. dialog.show();
  87. }
  88. /**
  89. * 设置弹出添加对话框
  90. */
  91. private void setAddDialog() {
  92. final Dialog dialog = new Dialog(MainActivity.this);
  93. dialog.setContentView(R.layout.dialog_add);
  94. dialog.setTitle("输入添加的货物的信息");
  95. Window dialogWindow = dialog.getWindow();
  96. WindowManager.LayoutParams lp = dialogWindow.getAttributes();
  97. dialogWindow.setGravity(Gravity.CENTER);
  98. dialogWindow.setAttributes(lp);
  99. final EditText cNameEditText = (EditText) dialog.findViewById(R.id.editText1);
  100. final EditText cNumEditText = (EditText) dialog.findViewById(R.id.editText2);
  101. Button btnConfirm = (Button) dialog.findViewById(R.id.button1);
  102. Button btnCancel = (Button) dialog.findViewById(R.id.button2);
  103. btnConfirm.setOnClickListener(new OnClickListener() {
  104. @Override
  105. public void onClick(View v) {
  106. dbUtil.insertCargoInfo(cNameEditText.getText().toString(), cNumEditText.getText().toString());
  107. dialog.dismiss();
  108. hideButton(false);
  109. Toast.makeText(MainActivity.this, "成功添加数据", Toast.LENGTH_SHORT).show();
  110. }
  111. });
  112. btnCancel.setOnClickListener(new OnClickListener() {
  113. @Override
  114. public void onClick(View v) {
  115. dialog.dismiss();
  116. hideButton(false);
  117. }
  118. });
  119. dialog.show();
  120. }
  121. /**
  122. * 设置listView
  123. */
  124. private void setListView() {
  125. listView.setVisibility(View.VISIBLE);
  126. List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
  127. list = dbUtil.getAllInfo();
  128. adapter = new SimpleAdapter(
  129. MainActivity.this,
  130. list,
  131. R.layout.adapter_item,
  132. new String[] { "Cno", "Cname", "Cnum" },
  133. new int[] { R.id.txt_Cno, R.id.txt_Cname, R.id.txt_Cnum });
  134. listView.setAdapter(adapter);
  135. }
  136. /**
  137. * 设置button的可见性
  138. */
  139. private void hideButton(boolean result) {
  140. if (result) {
  141. btn1.setVisibility(View.GONE);
  142. btn2.setVisibility(View.GONE);
  143. btn3.setVisibility(View.GONE);
  144. } else {
  145. btn1.setVisibility(View.VISIBLE);
  146. btn2.setVisibility(View.VISIBLE);
  147. btn3.setVisibility(View.VISIBLE);
  148. }
  149. }
  150. /**
  151. * 返回按钮的重写
  152. */
  153. @Override
  154. public void onBackPressed()
  155. {
  156. if (listView.getVisibility() == View.VISIBLE) {
  157. listView.setVisibility(View.GONE);
  158. hideButton(false);
  159. }else {
  160. MainActivity.this.finish();
  161. }
  162. }
  163. }

2.HttpConnSoap

(改类已经过时,更多请参照

http://blog.csdn.net/zhyl8157121/article/details/8709048)

  1. package com.bottle.stockmanage;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.util.ArrayList;
  8. public class HttpConnSoap {
  9. public ArrayList<String> GetWebServre(String methodName, ArrayList<String> Parameters, ArrayList<String> ParValues) {
  10. ArrayList<String> Values = new ArrayList<String>();
  11. //ServerUrl是指webservice的url
  12. //10.0.2.2是让android模拟器访问本地(PC)服务器,不能写成127.0.0.1
  13. //11125是指端口号,即挂载到IIS上的时候开启的端口
  14. //Service1.asmx是指提供服务的页面
  15. String ServerUrl = "http://10.0.2.2:11125/Service1.asmx";
  16. //String soapAction="http://tempuri.org/LongUserId1";
  17. String soapAction = "http://tempuri.org/" + methodName;
  18. //String data = "";
  19. String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
  20. + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
  21. + "<soap:Body />";
  22. String tps, vps, ts;
  23. String mreakString = "";
  24. mreakString = "<" + methodName + " xmlns=\"http://tempuri.org/\">";
  25. for (int i = 0; i < Parameters.size(); i++) {
  26. tps = Parameters.get(i).toString();
  27. //设置该方法的参数为.net webService中的参数名称
  28. vps = ParValues.get(i).toString();
  29. ts = "<" + tps + ">" + vps + "</" + tps + ">";
  30. mreakString = mreakString + ts;
  31. }
  32. mreakString = mreakString + "</" + methodName + ">";
  33. /*
  34. +"<HelloWorld xmlns=\"http://tempuri.org/\">"
  35. +"<x>string11661</x>"
  36. +"<SF1>string111</SF1>"
  37. + "</HelloWorld>"
  38. */
  39. String soap2 = "</soap:Envelope>";
  40. String requestData = soap + mreakString + soap2;
  41. //System.out.println(requestData);
  42. try {
  43. URL url = new URL(ServerUrl);
  44. HttpURLConnection con = (HttpURLConnection) url.openConnection();
  45. byte[] bytes = requestData.getBytes("utf-8");
  46. con.setDoInput(true);
  47. con.setDoOutput(true);
  48. con.setUseCaches(false);
  49. con.setConnectTimeout(6000);// 设置超时时间
  50. con.setRequestMethod("POST");
  51. con.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
  52. con.setRequestProperty("SOAPAction", soapAction);
  53. con.setRequestProperty("Content-Length", "" + bytes.length);
  54. OutputStream outStream = con.getOutputStream();
  55. outStream.write(bytes);
  56. outStream.flush();
  57. outStream.close();
  58. InputStream inStream = con.getInputStream();
  59. //data=parser(inStream);
  60. //System.out.print("11");
  61. Values = inputStreamtovaluelist(inStream, methodName);
  62. //System.out.println(Values.size());
  63. return Values;
  64. } catch (Exception e) {
  65. System.out.print("2221");
  66. return null;
  67. }
  68. }
  69. public ArrayList<String> inputStreamtovaluelist(InputStream in, String MonthsName) throws IOException {
  70. StringBuffer out = new StringBuffer();
  71. String s1 = "";
  72. byte[] b = new byte[4096];
  73. ArrayList<String> Values = new ArrayList<String>();
  74. Values.clear();
  75. for (int n; (n = in.read(b)) != -1;) {
  76. s1 = new String(b, 0, n);
  77. out.append(s1);
  78. }
  79. System.out.println(out);
  80. String[] s13 = s1.split("><");
  81. String ifString = MonthsName + "Result";
  82. String TS = "";
  83. String vs = "";
  84. Boolean getValueBoolean = false;
  85. for (int i = 0; i < s13.length; i++) {
  86. TS = s13[i];
  87. System.out.println(TS);
  88. int j, k, l;
  89. j = TS.indexOf(ifString);
  90. k = TS.lastIndexOf(ifString);
  91. if (j >= 0) {
  92. System.out.println(j);
  93. if (getValueBoolean == false) {
  94. getValueBoolean = true;
  95. } else {
  96. }
  97. if ((j >= 0) && (k > j)) {
  98. System.out.println("FFF" + TS.lastIndexOf("/" + ifString));
  99. //System.out.println(TS);
  100. l = ifString.length() + 1;
  101. vs = TS.substring(j + l, k - 2);
  102. //System.out.println("fff"+vs);
  103. Values.add(vs);
  104. System.out.println("退出" + vs);
  105. getValueBoolean = false;
  106. return Values;
  107. }
  108. }
  109. if (TS.lastIndexOf("/" + ifString) >= 0) {
  110. getValueBoolean = false;
  111. return Values;
  112. }
  113. if ((getValueBoolean) && (TS.lastIndexOf("/" + ifString) < 0) && (j < 0)) {
  114. k = TS.length();
  115. //System.out.println(TS);
  116. vs = TS.substring(7, k - 8);
  117. //System.out.println("f"+vs);
  118. Values.add(vs);
  119. }
  120. }
  121. return Values;
  122. }
  123. }

3.DBUtil

  1. package com.bottle.stockmanage;
  2. import java.sql.Connection;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. public class DBUtil {
  7. private ArrayList<String> arrayList = new ArrayList<String>();
  8. private ArrayList<String> brrayList = new ArrayList<String>();
  9. private ArrayList<String> crrayList = new ArrayList<String>();
  10. private HttpConnSoap Soap = new HttpConnSoap();
  11. public static Connection getConnection() {
  12. Connection con = null;
  13. try {
  14. //Class.forName("org.gjt.mm.mysql.Driver");
  15. //con=DriverManager.getConnection("jdbc:mysql://192.168.0.106:3306/test?useUnicode=true&characterEncoding=UTF-8","root","initial");
  16. } catch (Exception e) {
  17. //e.printStackTrace();
  18. }
  19. return con;
  20. }
  21. /**
  22. * 获取所有货物的信息
  23. *
  24. * @return
  25. */
  26. public List<HashMap<String, String>> getAllInfo() {
  27. List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
  28. arrayList.clear();
  29. brrayList.clear();
  30. crrayList.clear();
  31. crrayList = Soap.GetWebServre("selectAllCargoInfor", arrayList, brrayList);
  32. HashMap<String, String> tempHash = new HashMap<String, String>();
  33. tempHash.put("Cno", "Cno");
  34. tempHash.put("Cname", "Cname");
  35. tempHash.put("Cnum", "Cnum");
  36. list.add(tempHash);
  37. for (int j = 0; j < crrayList.size(); j += 3) {
  38. HashMap<String, String> hashMap = new HashMap<String, String>();
  39. hashMap.put("Cno", crrayList.get(j));
  40. hashMap.put("Cname", crrayList.get(j + 1));
  41. hashMap.put("Cnum", crrayList.get(j + 2));
  42. list.add(hashMap);
  43. }
  44. return list;
  45. }
  46. /**
  47. * 增加一条货物信息
  48. *
  49. * @return
  50. */
  51. public void insertCargoInfo(String Cname, String Cnum) {
  52. arrayList.clear();
  53. brrayList.clear();
  54. arrayList.add("Cname");
  55. arrayList.add("Cnum");
  56. brrayList.add(Cname);
  57. brrayList.add(Cnum);
  58. Soap.GetWebServre("insertCargoInfo", arrayList, brrayList);
  59. }
  60. /**
  61. * 删除一条货物信息
  62. *
  63. * @return
  64. */
  65. public void deleteCargoInfo(String Cno) {
  66. arrayList.clear();
  67. brrayList.clear();
  68. arrayList.add("Cno");
  69. brrayList.add(Cno);
  70. Soap.GetWebServre("deleteCargoInfo", arrayList, brrayList);
  71. }
  72. }

4.activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent" >
  5. <ListView
  6. android:id="@+id/listView"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. android:visibility="gone" >
  10. </ListView>
  11. <Button
  12. android:id="@+id/btn_all"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_above="@+id/btn_add"
  16. android:layout_alignLeft="@+id/btn_add"
  17. android:layout_marginBottom="10dip"
  18. android:text="@string/btn1" />
  19. <Button
  20. android:id="@+id/btn_add"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_centerHorizontal="true"
  24. android:layout_centerVertical="true"
  25. android:text="@string/btn2" />
  26. <Button
  27. android:id="@+id/btn_delete"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:layout_alignLeft="@+id/btn_add"
  31. android:layout_below="@+id/btn_add"
  32. android:layout_marginTop="10dip"
  33. android:text="@string/btn3" />
  34. </RelativeLayout>

5.adapter_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:descendantFocusability="blocksDescendants"
  6. android:gravity="center" >
  7. <TableRow
  8. android:id="@+id/classroom_detail_item_tableRow"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:gravity="center" >
  12. <TextView
  13. android:id="@+id/txt_Cno"
  14. android:layout_width="80dp"
  15. android:layout_height="wrap_content"
  16. android:gravity="center"
  17. android:height="40dp"
  18. android:textSize="14sp" >
  19. </TextView>
  20. <TextView
  21. android:id="@+id/txt_Cname"
  22. android:layout_width="80dp"
  23. android:layout_height="wrap_content"
  24. android:gravity="center"
  25. android:height="40dp"
  26. android:textSize="14sp" >
  27. </TextView>
  28. <TextView
  29. android:id="@+id/txt_Cnum"
  30. android:layout_width="80dp"
  31. android:layout_height="wrap_content"
  32. android:gravity="center"
  33. android:height="40dp"
  34. android:textSize="14sp" >
  35. </TextView>
  36. </TableRow>
  37. </TableLayout>

6.dialog_add.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <EditText
  7. android:id="@+id/editText1"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:ems="10"
  11. android:hint="@string/add_hint1" >
  12. <requestFocus />
  13. </EditText>
  14. <EditText
  15. android:id="@+id/editText2"
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content"
  18. android:ems="10"
  19. android:hint="@string/add_hint2"
  20. android:inputType="number" />
  21. <LinearLayout
  22. android:layout_width="fill_parent"
  23. android:layout_height="wrap_content"
  24. android:orientation="horizontal" >
  25. <Button
  26. android:id="@+id/button1"
  27. android:layout_width="100dip"
  28. android:layout_height="wrap_content"
  29. android:layout_marginLeft="20dip"
  30. android:text="@string/confirm" />
  31. <Button
  32. android:id="@+id/button2"
  33. android:layout_width="100dip"
  34. android:layout_height="wrap_content"
  35. android:layout_marginLeft="40dip"
  36. android:text="@string/cancel" />
  37. </LinearLayout>
  38. </LinearLayout>

7.dialog_delete.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <EditText
  7. android:id="@+id/editText1"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:ems="10"
  11. android:hint="@string/delete_hint" >
  12. <requestFocus />
  13. </EditText>
  14. <LinearLayout
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:orientation="horizontal" >
  18. <Button
  19. android:id="@+id/button1"
  20. android:layout_width="100dip"
  21. android:layout_height="wrap_content"
  22. android:layout_marginLeft="20dip"
  23. android:text="@string/confirm" />
  24. <Button
  25. android:id="@+id/button2"
  26. android:layout_width="100dip"
  27. android:layout_height="wrap_content"
  28. android:layout_marginLeft="40dip"
  29. android:text="@string/cancel" />
  30. </LinearLayout>
  31. </LinearLayout>

8.strings.xml

  1. <resources>
  2. <string name="app_name">StockManagement</string>
  3. <string name="menu_settings">Settings</string>
  4. <string name="title_activity_main">MainActivity</string>
  5. <string name="btn1">查看所有货物信息</string>
  6. <string name="btn2">增加一条货物信息</string>
  7. <string name="btn3">删除一条货物信息</string>
  8. <string name="add_hint1">输入添加的货物的名称</string>
  9. <string name="add_hint2">输入货物的数量</string>
  10. <string name="confirm">确定</string>
  11. <string name="cancel">取消</string>
  12. <string name="delete_hint">输入删除的货物的编号</string>
  13. </resources>

9.Manifest.xml

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.bottle.stockmanage"
  3. android:versionCode="1"
  4. android:versionName="1.0" >
  5. <uses-sdk
  6. android:minSdkVersion="7"
  7. android:targetSdkVersion="15" />
  8. <uses-permission android:name="android.permission.INTERNET" />
  9. <application
  10. android:icon="@drawable/ic_launcher"
  11. android:label="@string/app_name"
  12. android:theme="@android:style/Theme.NoTitleBar" >
  13. <activity
  14. android:name=".MainActivity"
  15. android:label="@string/title_activity_main"
  16. android:screenOrientation="portrait" >
  17. <intent-filter>
  18. <action android:name="android.intent.action.MAIN" />
  19. <category android:name="android.intent.category.LAUNCHER" />
  20. </intent-filter>
  21. </activity>
  22. </application>
  23. </manifest>

运行程序的效果如下图所示:

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

再说一下IIS,如果只是在本地进行测试等操作,是不需要使用到IIS的,但是如果想发布出去,就要配置一下IIS。

好啦,基本就是这样了。程序不是完善的,但大概的思路就是这样,用到的技术也大概就是这几样,但是每一样拿出来都够学一阵的了。

--->2012.12.02 增加内容

附上本文demo的CSDN下载地址

http://download.csdn.net/detail/zhyl8157121/4836107

--->2013.01.08 增加内容

解释一下android端如何和webservice通信的。(如何修改实例程序)

具体的更深层的东西已经在HttpSoap中封装好了,所以大家使用的时候可以直接用这个类就可以了。(我也不懂是怎么实现的……)

android调用的方法就是如DBUtil中那样,比如Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

其中arrayList中和brrayList中分别存放对应的webservice中“selectAllCargoInfor”方法的参数名和参数的值。

Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

由于webservice中的selectAllCargoInfo方法的参数为空,所以对应的,android端调用的时候,arrayList和brrayList的值就是空的。

所以大家在使用的时候,只需要将webservice中的方法写好,然后写好DBUtil中的调用参数即可。

.23 增加内容

如果获取值为空,可能是返回值是复杂类型造成的,可以参考:http://blog.csdn.net/zhyl8157121/article/details/8709048

谢谢支持,欢迎大家批评指正。

上一篇:Newtonsoft.Json


下一篇:NSNumber 转 NSString