yam 蕃薯藤
天空部落
  • 網誌
  • 相簿
  • 影音
  • 夯集
  • PK吧!
  • 揪便宜
  • i鬥圖
  • la zorza
  • 買房子
新聞
  • 即時新聞
  • 影音新聞
  • 新聞專輯
  • 政治新聞
  • 財經新聞
  • 娛樂新聞
  • 運動新聞
  • 兩岸新聞
  • 科技新聞
註冊 登入
夯集
隨便逛
  • 正妹
  • 熱門
  • 網誌
  • 旅遊/攝影
  • 愛情/交友
  • 親子/教育
  • 美食/休閒
  • 設計/創作
  • 家族/同好
  • 影視/音樂
  • 社會/人文
  • 時尚/美容
  • 寵物/生活
  • 工作/職場
  • 科技/金融
  • 運動/健康
  • 交通/運輸
  • 相簿
  • COSPLAY
  • 布袋戲迷
  • 電玩漫畫
  • 女生照片
  • 藝術寫真
  • 攝影作品
  • 男生照片
  • 影視娛樂
  • 大眼小布
  • 情侶拍拍
  • 旅遊紀錄
  • 朋友團體
  • 人文藝術
  • more...
推薦這個部落格: 0

Bird's Lab

日記 |網誌 |影音 |相簿 |好友 |留言板
2010-12-3 NSC Meeting | 主頁 | 2010-11-30 NSC Meeting
November 30, 2010
Android 呼叫 .Net 的 Web Service 教學以文找文
wewa85 在天空部落發表於20:02:22 | Android
 
 
 最近因為和學弟妹們合作開發Android手機程式已經網頁程式。因為網頁程式(VB.net)我先進行開發了,目前已完成三分一了。而學弟妹們開始要進行手機程式的開發了,而他們必須鏈接到MS SQL Server中提取資料。而在這我便想使用Web Service將資料庫的資料傳送給他們。所以才進行了以下的研究,此次研究花了我不少時間總算將它完成了。以下為準備步驟:

  1. 首先Android如果要連接 .Net Web Service 可以通過 ksoap2 的API這個套件去做連接。使用過覺得蠻方便的。ksoap2 version2.5.2 的API可以到此下載,或到ksoap2 的官網下載最新版本。
  2. 下載完畢後將它匯入到你的專案中,如圖:
  3. 之後將您的Web Service準備好,本次例子是寫一個手機登入程式。所以在此我的Web Service程式碼如下:

    Imports System.Web
    Imports System.Web.Services
    Imports System.Web.Services.Protocols

    ' 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
    ' <System.Web.Script.Services.ScriptService()> _ <WebService(Namespace:="http://12x.10x.8x.1xx/tpeg_weather/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class WebService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function MemberLogin(ByVal UserName As String, ByVal Password As String) As Boolean
         Return Membership.ValidateUser(UserName, Password)
    End Function

    End Class

     
  4.  接下來就是將ksoap 的 class lib import 到自己的手機程式內。
     
    import org.ksoap2.*;
    import org.ksoap2.serialization.*;
    import org.ksoap2.transport.*;
    import org.w3c.dom.Text;


     
  5. 接下來是整個完整的手機程式碼:


    package bird.samplecallwebservice;

    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapPrimitive;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;

    import android.app.Activity; import android.content.Intent;
    import android.os.Bundle; import android.view.View;
    import android.widget.Button; import android.widget.EditText;
    import android.widget.TextView;

    public class SampleCallWebService extends Activity {
    /** Called when the activity is first created. */
    /** 宣告連接 Web Service的基本資料*/
    private static final String NAMESPACE = "http://1xx.1xx.8x.6x/tpeg_weather/" ;
    private static final String URL = " http://1xx.1xx.8x.6x/tpeg_weather/WebService.asmx";  

    /** 宣告呼叫 Web Service 中的Method,本例子呼叫的Method名為: MemberLogin*/
    /** Method MemberLogin Input Type : (String,String)*/
    /** Method MemberLogin Ouput Type : (Boolean)*/
    private static final String MemberLogin_SOAP_ACTION = "http://1xx.1xx.8x.6x/tpeg_weather/MemberLogin";
    private static final String METHOD_NAME2 = "MemberLogin";


    private EditText et_id,et_pwd;
    private Button btn_login;
    private TextView tv_msg;

    public Boolean MemberLogin(String str_id, String str_pwd){
    Boolean Flag = false;
    /** 將EditText中的值傳給 Web Service,以執行 MemberLogin(String UserName,String Password)*/
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);
    request.addProperty("UserName", str_id);
    request.addProperty("Password", str_pwd);

    /** 設定呼叫 Web Service一些值*/
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    tv_msg = (TextView) findViewById(R.id.TextView03);
    try
    {
    /** 開始呼叫 Web Service*/
    androidHttpTransport.call(MemberLogin_SOAP_ACTION, envelope);

    /** 得到回傳值,必須使用SoapPrimitive型態來儲存,本次宣告了一個Result(SoapPrimitive型態)來儲存回傳值*/
    SoapPrimitive Result = (SoapPrimitive)envelope.getResponse();

    /** 由於回傳值是SoapPrimitive型態,而我們需要的是Boolean值,所以在此做個轉換型態*/
    Flag = Boolean.parseBoolean(Result.toString());
    }
    catch(Exception e) 
    {
    tv_msg.setText(e.getMessage());
    }
    return Flag;

    }


     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn_login = (Button) findViewById(R.id.Button01);
        et_id = (EditText) findViewById(R.id.EditText01);
        et_pwd = (EditText) findViewById(R.id.EditText02);

        /** 當按下Login按鈕時,會呼叫上面寫好的MemberLogin函式,然後判斷回傳的Boolean。如果是True就跳到新的頁面,如果False就顯示帳號密碼輸入錯誤的信息*/
        btn_login.setOnClickListener(new Button.OnClickListener()
        {
         public void onClick(View v){

         String str_id, str_pwd;
         str_id = et_id.getText().toString();
         str_pwd = et_pwd.getText().toString();
         if (MemberLogin(str_id,str_pwd)){
         Intent intent = new Intent();
         intent.setClass(SampleCallWebService.this, Success.class);
        Bundle bundle = new Bundle();   bundle.putString("UserName", str_id);
      intent.putExtras(bundle);
      startActivity(intent);
      }else{
      tv_msg = (TextView) findViewById(R.id.TextView03);
      tv_msg.setText("Invalid User Name or Password!");
      et_id.setText("");
    et_pwd.setText("");
      }
      }
       });
    }


     
  6. 當Web Service 驗證帳密都通過後會跳到新的畫面。其完整程式碼可按此下載。 
     
References:
  1. http://composedcrap.blogspot.com/2009/08/connecting-to-net-web-service-from.html
  2. 完整影片教學:http://www.vimeo.com/9633556
  3. ksoap2 官網:http://code.google.com/p/ksoap2-android/
留言 (0) | 引用 (0) | 人氣 () | 轉寄 | 檢舉
| 主頁 | 此分類下一篇:解決使用 debug.storekey 出現 Invalid keystore format
引用 (你可以針對此文寫一篇屬於自己的blog/想法,並給作者一個通告)
引用
留言 (0筆) (登入後, 即可開始發表留言)
系統公告
熱情贊助
yam揪便宜
搜尋欄位
搜尋:
個人檔案
個人圖檔
ID:wewa85
暱稱:Nicky
生日:1985/02/6
  • 好友 |
    • 好友功能
    • 觀看好友列表
    • 觀看人緣列表
  • 人氣 |
  • 簡介 

文章分類
  • Programming (5)
    • C 的學習 (1)
    • Android (3)
    • BCB C++ (4)
    • SQL (3)
    • ASP.Net (4)
  • Research (3)
    • U-Learning (6)
    • 99 專題研究 (3)
    • 99 NSC (29)
  • Paper Reading (1)
    • Papers Reading (3)
  • 其他 (1)
yam今日我最殺
我的活動曆
連結書籤
  • 懿維的網誌
  • 智慧用藥
wewa85的最新回應
  • 目前沒有留言
誰推薦我
目前無名單
誰來我家
RSS 訂閱
RSS2
ATOM
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam 天空部落 本身立場。
POWERED BY
POWERED BY 天空部落
會員登入│免費註冊