Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android通過webservice連接SQLServer 詳細教程(數據庫+服務器+客戶端)

Android通過webservice連接SQLServer 詳細教程(數據庫+服務器+客戶端)

編輯:關於Android編程

為了避免再次被說標題黨,這裡先說明些事情:

第一,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

 

 

 

下圖是設計表的時候的截圖。

\

 

向表中輸入內容

\

吐槽一下:為什麼這裡貓、狗、電話都有,甚至還有Surface?!這只能說當時LZ在想這些……

 

 

服務器端程序設計(Webservice)

其實服務端可以寫成webservice也可以寫成website,前者只是提供一種服務,而後者是可以提供用戶界面等具體的頁面,後者也就是咱們平時所說的“網站”。

兩者的區別:

Web Service 只提供程序和接口,不提供用戶界面Web Site 提供程序和接口,也提供用戶界面(網頁)

 

由於咱們只是需要一個中介來訪問sqlserver,所以寫成webservice足夠了。

目標:寫一個Website訪問Sqlserver,獲取數據並轉換成xml格式,然後傳遞給android客戶端。

 

1.新建一個Webservice工程

\

2.視圖 ->其它窗口 -> 服務器資源管理器

\

3.右鍵數據連接 -> 添加連接

\

4.選擇Microsoft Sqlserver

\

5.如下圖所示選擇(可以點擊測試連接來檢測連接是否成功,然後點擊確定)

\

6.數據庫的查看和編輯也可以在VS中進行了

\

7.先查看一下數據庫屬性並記錄下連接屬性

\

8.新建一個類DBOperation,代碼如下:

 

[csharp]view plaincopy   print?在CODE上查看代碼片派生到我的代碼片
  1. usingSystem;
  2. usingSystem.Data;
  3. usingSystem.Configuration;
  4. usingSystem.Linq;
  5. usingSystem.Web;
  6. usingSystem.Web.Security;
  7. usingSystem.Web.UI;
  8. usingSystem.Web.UI.HtmlControls;
  9. usingSystem.Web.UI.WebControls;
  10. usingSystem.Web.UI.WebControls.WebParts;
  11. usingSystem.Xml.Linq;
  12. usingSystem.Data.SqlClient;
  13. usingSystem.Text.RegularExpressions;
  14. usingSystem.Collections;
  15. usingSystem.Collections.Generic;
  16.  
  17. namespaceStockManageWebservice
  18. {
  19. ///
  20. ///一個操作數據庫的類,所有對SQLServer的操作都寫在這個類中,使用的時候實例化一個然後直接調用就可以
  21. ///
  22. publicclassDBOperation:IDisposable
  23. {
  24. publicstaticSqlConnectionsqlCon;//用於連接數據庫
  25.  
  26. //將下面的引號之間的內容換成上面記錄下的屬性中的連接字符串
  27. privateStringConServerStr=@"DataSource=BOTTLE-PC;InitialCatalog=StockManage;IntegratedSecurity=True";
  28.  
  29. //默認構造函數
  30. publicDBOperation()
  31. {
  32. if(sqlCon==null)
  33. {
  34. sqlCon=newSqlConnection();
  35. sqlCon.ConnectionString=ConServerStr;
  36. sqlCon.Open();
  37. }
  38. }
  39.  
  40. //關閉/銷毀函數,相當於Close()
  41. publicvoidDispose()
  42. {
  43. if(sqlCon!=null)
  44. {
  45. sqlCon.Close();
  46. sqlCon=null;
  47. }
  48. }
  49.  
  50. ///
  51. ///獲取所有貨物的信息
  52. ///
  53. ///所有貨物信息
  54. publicListselectAllCargoInfor()
  55. {
  56. Listlist=newList();
  57.  
  58. try
  59. {
  60. stringsql="select*fromC";
  61. SqlCommandcmd=newSqlCommand(sql,sqlCon);
  62. SqlDataReaderreader=cmd.ExecuteReader();
  63.  
  64. while(reader.Read())
  65. {
  66. //將結果集信息添加到返回向量中
  67. list.Add(reader[0].ToString());
  68. list.Add(reader[1].ToString());
  69. list.Add(reader[2].ToString());
  70.  
  71. }
  72.  
  73. reader.Close();
  74. cmd.Dispose();
  75.  
  76. }
  77. catch(Exception)
  78. {
  79.  
  80. }
  81. returnlist;
  82. }
  83.  
  84. ///
  85. ///增加一條貨物信息
  86. ///
  87. ///貨物名稱
  88. ///貨物數量
  89. publicboolinsertCargoInfo(stringCname,intCnum)
  90. {
  91. try
  92. {
  93. stringsql="insertintoC(Cname,Cnum)values('"+Cname+"',"+Cnum+")";
  94. SqlCommandcmd=newSqlCommand(sql,sqlCon);
  95. cmd.ExecuteNonQuery();
  96. cmd.Dispose();
  97.  
  98. returntrue;
  99. }
  100. catch(Exception)
  101. {
  102. returnfalse;
  103. }
  104. }
  105.  
  106. ///
  107. ///刪除一條貨物信息
  108. ///
  109. ///貨物編號
  110. publicbooldeleteCargoInfo(stringCno)
  111. {
  112. try
  113. {
  114. stringsql="deletefromCwhereCno="+Cno;
  115. SqlCommandcmd=newSqlCommand(sql,sqlCon);
  116. cmd.ExecuteNonQuery();
  117. cmd.Dispose();
  118.  
  119. returntrue;
  120. }
  121. catch(Exception)
  122. {
  123. returnfalse;
  124. }
  125. }
  126. }
  127. }

9. 修改Service1.asmx.cs代碼如下:
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Web;
  5. usingSystem.Web.Services;
  6.  
  7. namespaceStockManageWebservice
  8. {
  9. ///
  10. ///Service1的摘要說明
  11. ///
  12. [WebService(Namespace="http://tempuri.org/")]
  13. [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
  14. [System.ComponentModel.ToolboxItem(false)]
  15. //若要允許使用ASP.NETAJAX從腳本中調用此Web服務,請取消對下行的注釋。
  16. //[System.Web.Script.Services.ScriptService]
  17. publicclassService1:System.Web.Services.WebService
  18. {
  19. DBOperationdbOperation=newDBOperation();
  20.  
  21. [WebMethod]
  22. publicstringHelloWorld()
  23. {
  24. return"HelloWorld";
  25. }
  26.  
  27. [WebMethod(Description="獲取所有貨物的信息")]
  28. publicstring[]selectAllCargoInfor()
  29. {
  30. returndbOperation.selectAllCargoInfor().ToArray();
  31. }
  32.  
  33. [WebMethod(Description="增加一條貨物信息")]
  34. publicboolinsertCargoInfo(stringCname,intCnum)
  35. {
  36. returndbOperation.insertCargoInfo(Cname,Cnum);
  37. }
  38.  
  39. [WebMethod(Description="刪除一條貨物信息")]
  40. publicbooldeleteCargoInfo(stringCno)
  41. {
  42. returndbOperation.deleteCargoInfo(Cno);
  43. }
  44. }
  45. }
 

 

10.運行程序(F5),會自動打開一個浏覽器,可以看到如下畫面:

\

11.選擇相應的功能並傳遞參數可以實現調試從浏覽器中調試程序:

下圖選擇的是增加一條貨物信息

\

 

12. 程序執行的結果:

\

13.另,記住這裡的端口名,後面android的程序中添入的端口號就是這個:

\

 

客戶端(android端)程序設計

程序代碼:

1.MainActivity

 

[java]view plaincopy   print?在CODE上查看代碼片派生到我的代碼片
  1. packagecom.bottle.stockmanage;
  2.  
  3. importjava.util.ArrayList;
  4. importjava.util.HashMap;
  5. importjava.util.List;
  6.  
  7. importandroid.app.Activity;
  8. importandroid.app.Dialog;
  9. importandroid.os.Bundle;
  10. importandroid.view.Gravity;
  11. importandroid.view.View;
  12. importandroid.view.View.OnClickListener;
  13. importandroid.view.Window;
  14. importandroid.view.WindowManager;
  15. importandroid.widget.Button;
  16. importandroid.widget.EditText;
  17. importandroid.widget.ListView;
  18. importandroid.widget.SimpleAdapter;
  19. importandroid.widget.Toast;
  20.  
  21. publicclassMainActivityextendsActivity{
  22.  
  23. privateButtonbtn1;
  24. privateButtonbtn2;
  25. privateButtonbtn3;
  26. privateListViewlistView;
  27. privateSimpleAdapteradapter;
  28. privateDBUtildbUtil;
  29.  
  30. @Override
  31. publicvoidonCreate(BundlesavedInstanceState){
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.activity_main);
  34.  
  35. btn1=(Button)findViewById(R.id.btn_all);
  36. btn2=(Button)findViewById(R.id.btn_add);
  37. btn3=(Button)findViewById(R.id.btn_delete);
  38. listView=(ListView)findViewById(R.id.listView);
  39. dbUtil=newDBUtil();
  40.  
  41. btn1.setOnClickListener(newOnClickListener(){
  42.  
  43. @Override
  44. publicvoidonClick(Viewv){
  45. hideButton(true);
  46. setListView();
  47. }
  48. });
  49.  
  50. btn2.setOnClickListener(newOnClickListener(){
  51.  
  52. @Override
  53. publicvoidonClick(Viewv){
  54. hideButton(true);
  55. setAddDialog();
  56. }
  57. });
  58.  
  59. btn3.setOnClickListener(newOnClickListener(){
  60.  
  61. @Override
  62. publicvoidonClick(Viewv){
  63. hideButton(true);
  64. setDeleteDialog();
  65. }
  66. });
  67. }
  68.  
  69. /**
  70. *設置彈出刪除對話框
  71. */
  72. privatevoidsetDeleteDialog(){
  73.  
  74. finalDialogdialog=newDialog(MainActivity.this);
  75. dialog.setContentView(R.layout.dialog_delete);
  76. dialog.setTitle("輸入想要刪除的貨物的編號");
  77. WindowdialogWindow=dialog.getWindow();
  78. WindowManager.LayoutParamslp=dialogWindow.getAttributes();
  79. dialogWindow.setGravity(Gravity.CENTER);
  80. dialogWindow.setAttributes(lp);
  81.  
  82. finalEditTextcNoEditText=(EditText)dialog.findViewById(R.id.editText1);
  83. ButtonbtnConfirm=(Button)dialog.findViewById(R.id.button1);
  84. ButtonbtnCancel=(Button)dialog.findViewById(R.id.button2);
  85.  
  86. btnConfirm.setOnClickListener(newOnClickListener(){
  87.  
  88. @Override
  89. publicvoidonClick(Viewv){
  90. dbUtil.deleteCargoInfo(cNoEditText.getText().toString());
  91. dialog.dismiss();
  92. hideButton(false);
  93. Toast.makeText(MainActivity.this,"成功刪除數據",Toast.LENGTH_SHORT).show();
  94. }
  95. });
  96.  
  97. btnCancel.setOnClickListener(newOnClickListener(){
  98.  
  99. @Override
  100. publicvoidonClick(Viewv){
  101. dialog.dismiss();
  102. hideButton(false);
  103. }
  104. });
  105.  
  106. dialog.show();
  107. }
  108.  
  109. /**
  110. *設置彈出添加對話框
  111. */
  112. privatevoidsetAddDialog(){
  113.  
  114. finalDialogdialog=newDialog(MainActivity.this);
  115. dialog.setContentView(R.layout.dialog_add);
  116. dialog.setTitle("輸入添加的貨物的信息");
  117. WindowdialogWindow=dialog.getWindow();
  118. WindowManager.LayoutParamslp=dialogWindow.getAttributes();
  119. dialogWindow.setGravity(Gravity.CENTER);
  120. dialogWindow.setAttributes(lp);
  121.  
  122. finalEditTextcNameEditText=(EditText)dialog.findViewById(R.id.editText1);
  123. finalEditTextcNumEditText=(EditText)dialog.findViewById(R.id.editText2);
  124. ButtonbtnConfirm=(Button)dialog.findViewById(R.id.button1);
  125. ButtonbtnCancel=(Button)dialog.findViewById(R.id.button2);
  126.  
  127. btnConfirm.setOnClickListener(newOnClickListener(){
  128.  
  129. @Override
  130. publicvoidonClick(Viewv){
  131.  
  132. dbUtil.insertCargoInfo(cNameEditText.getText().toString(),cNumEditText.getText().toString());
  133. dialog.dismiss();
  134. hideButton(false);
  135. Toast.makeText(MainActivity.this,"成功添加數據",Toast.LENGTH_SHORT).show();
  136. }
  137. });
  138.  
  139. btnCancel.setOnClickListener(newOnClickListener(){
  140.  
  141. @Override
  142. publicvoidonClick(Viewv){
  143. dialog.dismiss();
  144. hideButton(false);
  145. }
  146. });
  147. dialog.show();
  148. }
  149.  
  150. /**
  151. *設置listView
  152. */
  153. privatevoidsetListView(){
  154.  
  155. listView.setVisibility(View.VISIBLE);
  156.  
  157. List>list=newArrayList>();
  158.  
  159. list=dbUtil.getAllInfo();
  160.  
  161. adapter=newSimpleAdapter(
  162. MainActivity.this,
  163. list,
  164. R.layout.adapter_item,
  165. newString[]{"Cno","Cname","Cnum"},
  166. newint[]{R.id.txt_Cno,R.id.txt_Cname,R.id.txt_Cnum});
  167.  
  168. listView.setAdapter(adapter);
  169.  
  170. }
  171.  
  172. /**
  173. *設置button的可見性
  174. */
  175. privatevoidhideButton(booleanresult){
  176. if(result){
  177. btn1.setVisibility(View.GONE);
  178. btn2.setVisibility(View.GONE);
  179. btn3.setVisibility(View.GONE);
  180. }else{
  181. btn1.setVisibility(View.VISIBLE);
  182. btn2.setVisibility(View.VISIBLE);
  183. btn3.setVisibility(View.VISIBLE);
  184. }
  185.  
  186. }
  187.  
  188. /**
  189. *返回按鈕的重寫
  190. */
  191. @Override
  192. publicvoidonBackPressed()
  193. {
  194. if(listView.getVisibility()==View.VISIBLE){
  195. listView.setVisibility(View.GONE);
  196. hideButton(false);
  197. }else{
  198. MainActivity.this.finish();
  199. }
  200. }
  201. }
  202.  

2.HttpConnSoap

(改類已經過時,更多請參照

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

 

 

[java]view plaincopy

 

print?在CODE上查看代碼片派生到我的代碼片

  1. packagecom.bottle.stockmanage;
  2.  
  3. importjava.io.IOException;
  4. importjava.io.InputStream;
  5. importjava.io.OutputStream;
  6. importjava.net.HttpURLConnection;
  7. importjava.net.URL;
  8. importjava.util.ArrayList;
  9.  
  10. publicclassHttpConnSoap{
  11. publicArrayListGetWebServre(StringmethodName,ArrayListParameters,ArrayListParValues){
  12. ArrayListValues=newArrayList();
  13.  
  14. //ServerUrl是指webservice的url
  15. //10.0.2.2是讓android模擬器訪問本地(PC)服務器,不能寫成127.0.0.1
  16. //11125是指端口號,即掛載到IIS上的時候開啟的端口
  17. //Service1.asmx是指提供服務的頁面
  18. StringServerUrl="http://10.0.2.2:11125/Service1.asmx";
  19.  
  20. //StringsoapAction="http://tempuri.org/LongUserId1";
  21. StringsoapAction="http://tempuri.org/"+methodName;
  22. //Stringdata="";
  23. Stringsoap=""
  24. +"";
  25. Stringtps,vps,ts;
  26. StringmreakString="";
  27.  
  28. mreakString="<"+methodName+"xmlns=\"http://tempuri.org/\">";
  29. for(inti=0;i tps=Parameters.get(i).toString();
  30. //設置該方法的參數為.netwebService中的參數名稱
  31. vps=ParValues.get(i).toString();
  32. ts="<"+tps+">"+vps+"";
  33. mreakString=mreakString+ts;
  34. }
  35. mreakString=mreakString+"";
  36. /*
  37. +"string11661"
  38. +"string111"
  39. +""
  40. */
  41. Stringsoap2="";
  42. StringrequestData=soap+mreakString+soap2;
  43. //System.out.println(requestData);
  44.  
  45. try{
  46. URLurl=newURL(ServerUrl);
  47. HttpURLConnectioncon=(HttpURLConnection)url.openConnection();
  48. byte[]bytes=requestData.getBytes("utf-8");
  49. con.setDoInput(true);
  50. con.setDoOutput(true);
  51. con.setUseCaches(false);
  52. con.setConnectTimeout(6000);//設置超時時間
  53. con.setRequestMethod("POST");
  54. con.setRequestProperty("Content-Type","text/xml;charset=utf-8");
  55. con.setRequestProperty("SOAPAction",soapAction);
  56. con.setRequestProperty("Content-Length",""+bytes.length);
  57. OutputStreamoutStream=con.getOutputStream();
  58. outStream.write(bytes);
  59. outStream.flush();
  60. outStream.close();
  61. InputStreaminStream=con.getInputStream();
  62.  
  63. //data=parser(inStream);
  64. //System.out.print("11");
  65. Values=inputStreamtovaluelist(inStream,methodName);
  66. //System.out.println(Values.size());
  67. returnValues;
  68.  
  69. }catch(Exceptione){
  70. System.out.print("2221");
  71. returnnull;
  72. }
  73. }
  74.  
  75. publicArrayListinputStreamtovaluelist(InputStreamin,StringMonthsName)throwsIOException{
  76. StringBufferout=newStringBuffer();
  77. Strings1="";
  78. byte[]b=newbyte[4096];
  79. ArrayListValues=newArrayList();
  80. Values.clear();
  81.  
  82. for(intn;(n=in.read(b))!=-1;){
  83. s1=newString(b,0,n);
  84. out.append(s1);
  85. }
  86.  
  87. System.out.println(out);
  88. String[]s13=s1.split("><");
  89. StringifString=MonthsName+"Result";
  90. StringTS="";
  91. Stringvs="";
  92.  
  93. BooleangetValueBoolean=false;
  94. for(inti=0;i TS=s13[i];
  95. System.out.println(TS);
  96. intj,k,l;
  97. j=TS.indexOf(ifString);
  98. k=TS.lastIndexOf(ifString);
  99.  
  100. if(j>=0){
  101. System.out.println(j);
  102. if(getValueBoolean==false){
  103. getValueBoolean=true;
  104. }else{
  105.  
  106. }
  107.  
  108. if((j>=0)&&(k>j)){
  109. System.out.println("FFF"+TS.lastIndexOf("/"+ifString));
  110. //System.out.println(TS);
  111. l=ifString.length()+1;
  112. vs=TS.substring(j+l,k-2);
  113. //System.out.println("fff"+vs);
  114. Values.add(vs);
  115. System.out.println("退出"+vs);
  116. getValueBoolean=false;
  117. returnValues;
  118. }
  119.  
  120. }
  121. if(TS.lastIndexOf("/"+ifString)>=0){
  122. getValueBoolean=false;
  123. returnValues;
  124. }
  125. if((getValueBoolean)&&(TS.lastIndexOf("/"+ifString)<0)&&(j<0)){
  126. k=TS.length();
  127. //System.out.println(TS);
  128. vs=TS.substring(7,k-8);
  129. //System.out.println("f"+vs);
  130. Values.add(vs);
  131. }
  132.  
  133. }
  134.  
  135. returnValues;
  136. }
  137.  
  138. }

3.DBUtil
  1. packagecom.bottle.stockmanage;
  2.  
  3. importjava.sql.Connection;
  4. importjava.util.ArrayList;
  5. importjava.util.HashMap;
  6. importjava.util.List;
  7.  
  8. publicclassDBUtil{
  9. privateArrayListarrayList=newArrayList();
  10. privateArrayListbrrayList=newArrayList();
  11. privateArrayListcrrayList=newArrayList();
  12. privateHttpConnSoapSoap=newHttpConnSoap();
  13.  
  14. publicstaticConnectiongetConnection(){
  15. Connectioncon=null;
  16. try{
  17. //Class.forName("org.gjt.mm.mysql.Driver");
  18. //con=DriverManager.getConnection("jdbc:mysql://192.168.0.106:3306/test?useUnicode=true&characterEncoding=UTF-8","root","initial");
  19. }catch(Exceptione){
  20. //e.printStackTrace();
  21. }
  22. returncon;
  23. }
  24.  
  25. /**
  26. *獲取所有貨物的信息
  27. *
  28. *@return
  29. */
  30. publicList>getAllInfo(){
  31. List>list=newArrayList>();
  32.  
  33. arrayList.clear();
  34. brrayList.clear();
  35. crrayList.clear();
  36.  
  37. crrayList=Soap.GetWebServre("selectAllCargoInfor",arrayList,brrayList);
  38.  
  39. HashMaptempHash=newHashMap();
  40. tempHash.put("Cno","Cno");
  41. tempHash.put("Cname","Cname");
  42. tempHash.put("Cnum","Cnum");
  43. list.add(tempHash);
  44.  
  45. for(intj=0;j HashMaphashMap=newHashMap();
  46. hashMap.put("Cno",crrayList.get(j));
  47. hashMap.put("Cname",crrayList.get(j+1));
  48. hashMap.put("Cnum",crrayList.get(j+2));
  49. list.add(hashMap);
  50. }
  51.  
  52. returnlist;
  53. }
  54.  
  55. /**
  56. *增加一條貨物信息
  57. *
  58. *@return
  59. */
  60. publicvoidinsertCargoInfo(StringCname,StringCnum){
  61.  
  62. arrayList.clear();
  63. brrayList.clear();
  64.  
  65. arrayList.add("Cname");
  66. arrayList.add("Cnum");
  67. brrayList.add(Cname);
  68. brrayList.add(Cnum);
  69.  
  70. Soap.GetWebServre("insertCargoInfo",arrayList,brrayList);
  71. }
  72.  
  73. /**
  74. *刪除一條貨物信息
  75. *
  76. *@return
  77. */
  78. publicvoiddeleteCargoInfo(StringCno){
  79.  
  80. arrayList.clear();
  81. brrayList.clear();
  82.  
  83. arrayList.add("Cno");
  84. brrayList.add(Cno);
  85.  
  86. Soap.GetWebServre("deleteCargoInfo",arrayList,brrayList);
  87. }
  88. }

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

5.adapter_item.xml
  1.  
  2.  
  3. android:layout_height="wrap_content"
  4. android:descendantFocusability="blocksDescendants"
  5. android:gravity="center">
  6.  
  7. android:id="@+id/classroom_detail_item_tableRow"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:gravity="center">
  11.  
  12. android:id="@+id/txt_Cno"
  13. android:layout_width="80dp"
  14. android:layout_height="wrap_content"
  15. android:gravity="center"
  16. android:height="40dp"
  17. android:textSize="14sp">
  18.  
  19.  
  20. android:id="@+id/txt_Cname"
  21. android:layout_width="80dp"
  22. android:layout_height="wrap_content"
  23. android:gravity="center"
  24. android:height="40dp"
  25. android:textSize="14sp">
  26.  
  27.  
  28. android:id="@+id/txt_Cnum"
  29. android:layout_width="80dp"
  30. android:layout_height="wrap_content"
  31. android:gravity="center"
  32. android:height="40dp"
  33. android:textSize="14sp">
  34.  
  35.  
  36.  
  37.  
  38.  

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

7.dialog_delete.xml
  1.  
  2.  
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical">
  5.  
  6. android:id="@+id/editText1"
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:ems="10"
  10. android:hint="@string/delete_hint">
  11.  
  12.  
  13.  
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:orientation="horizontal">
  17.  
  18. android:id="@+id/button1"
  19. android:layout_width="100dip"
  20. android:layout_height="wrap_content"
  21. android:layout_marginLeft="20dip"
  22. android:text="@string/confirm"/>
  23.  
  24. android:id="@+id/button2"
  25. android:layout_width="100dip"
  26. android:layout_height="wrap_content"
  27. android:layout_marginLeft="40dip"
  28. android:text="@string/cancel"/>
  29.  
  30.  
  31.  

8.strings.xml
  1.  
  2. StockManagement
  3. Settings
  4. MainActivity
  5. 查看所有貨物信息
  6. 增加一條貨物信息
  7. 刪除一條貨物信息
  8. 輸入添加的貨物的名稱
  9. 輸入貨物的數量
  10. 確定
  11. 取消
  12. 輸入刪除的貨物的編號
  13.  
  14.  

9.Manifest.xml
  1.  
  2. android:versionCode="1"
  3. android:versionName="1.0">
  4.  
  5. android:minSdkVersion="7"
  6. android:targetSdkVersion="15"/>
  7.  
  8.  
  9.  
  10. android:icon="@drawable/ic_launcher"
  11. android:label="@string/app_name"
  12. android:theme="@android:style/Theme.NoTitleBar">
  13. android:name=".MainActivity"
  14. android:label="@string/title_activity_main"
  15. android:screenOrientation="portrait">
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  

運行程序的效果如下圖所示:

 

\

\

\

\

 

再說一下IIS,如果只是在本地進行測試等操作,是不需要使用到IIS的,但是如果想發布出去,就要配置一下IIS。

 

好啦,基本就是這樣了。程序不是完善的,但大概的思路就是這樣,用

之前收到過一些同學發來的郵件,問題大概以下幾種,這裡統一答復一下吧,希望給有問題的同學一個參考。

0.Webservice無法正確執行(這個沒什麼說的,webservice有問題)

1.Webservice用本地的電腦可以訪問,但是在手機浏覽器中就無法得到正確的結果(Webservice配置問題,或者IIS配置問題)

2.Webservice用本地的電腦和手機浏覽器都可以正確執行,但是程序一運行就崩潰

2.1 可能情況1 - 我的程序是用Android2.1寫的,Android2.3以後有一個StrictMode的問題,如果有同學是用2.3以上版本做的,可能是這個問題,具體可以搜索一下StrictMode,然後修改一下程序即可,我在這裡就不獻丑了。

 

2.2 可能情況2 - 調試的時候是用的是模擬器,IP地址當時填寫的是10.0.2.2,這個地址是PC相對於模擬器的IP地址,放到真機中就不行了,真機運行程序中要填寫PC的IP地址(可以將手機和PC連接在同一個局域網中做測試,也可以將程序發布到服務器上,Android程序中填寫服務器的IP地址和端口號)。

 

3.用模擬器調試怎麼都可以,但放到真機上就不行。

3.1 可能情況1 - 模擬器的版本是2.3以下的,程序運行正常,可是真機是2.3以上的,解決方法參考2.1。

 

3.2 可能情況2 -放到真機運行的時候沒改程序的url,IP地址錯誤,解決方法參考2.2。

 

4.SQL語句錯誤、按鈕監聽錯誤等問題大家細心查查就行了。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved