Android 調用 Asp.net 的WebService 實例


ASP.Net WebService程序代碼:VS2008

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;

namespace RepairWebService
{
    /// <summary>
    /// WebService 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        /// <summary>
        /// 數據庫連接字符串
        /// </summary>
        public string connstr = SqlHelper.ConnectionStringLocalTransaction;
       
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
        [WebMethod]
        public UsersModel GetPwdByName(string name)
        {
            UsersModel model = null;
            string strsql = "select * from users where name='"+name+"'";
            SqlDataReader dr=SqlHelper.ExecuteReader(connstr, CommandType.Text, strsql, null);
            if (dr.Read())
            {
                model = new UsersModel();
                model.Id = dr.GetInt32(0);
                model.Name = dr.GetString(1);
                model.Pwd = dr.GetString(2);
            }
            return model;
        }
     
        [WebMethod]
        public List<RepairsModel> GetRepairsList()
        {
            List<RepairsModel> list = new List<RepairsModel>();
            string str = "select * from repairs";
            SqlDataReader dr = SqlHelper.ExecuteReader(connstr, CommandType.Text, str, null);
            while (dr.Read())
            {
                RepairsModel model = new RepairsModel();
                model.Id = dr.GetInt32(0);
                model.RepairId = dr.GetString(1);
                model.RepairName = dr.GetString(2);
                model.RepairDate = dr.GetDateTime(3);
                model.RepairStateId = dr.GetInt32(4);
                model.UserId = dr.GetInt32(5);
                list.Add(model);
            }
            return list;
        }
    }
}

Users實體類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RepairWebService
{
    public class UsersModel
    {
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private string pwd;

        public string Pwd
        {
            get { return pwd; }
            set { pwd = value; }
        }
    }
}

Repairs實體類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RepairWebService
{
    public class RepairsModel
    {
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }


        private string repairName;

        public string RepairName
        {
            get { return repairName; }
            set { repairName = value; }
        }
    }
}

SqlHelper類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using System.Configuration;

namespace RepairWebService
{
    public class SqlHelper
    {
         //獲取數據庫連接字符串,其屬於靜態變量且只讀,項目中所有文檔可以直接使用,但不能修改
        public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings[1].ConnectionString;
        

        // 哈希表用來存儲緩存的參數信息,哈希表可以存儲任意類型的參數。
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

        /// <summary>
        ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字符串。
        /// 使用參數數組形式提供參數列表
        /// </summary>
        /// <remarks>
        /// 使用示例:
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一個有效的數據庫連接字符串</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個數值表示此SqlCommand命令執行后影響的行數</returns>
        public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

            SqlCommand cmd = new SqlCommand();

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                //通過PrePareCommand方法將參數逐個加入到SqlCommand的參數集合中
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();

                //清空SqlCommand中的參數列表
                cmd.Parameters.Clear();
                return val;
            }
        }

        /// <summary>
        ///執行一條不返回結果的SqlCommand,通過一個已經存在的數據庫連接
        /// 使用參數數組提供參數
        /// </summary>
        /// <remarks>
        /// 使用示例:  
        ///  int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="conn">一個現有的數據庫連接</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個數值表示此SqlCommand命令執行后影響的行數</returns>
        public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

            SqlCommand cmd = new SqlCommand();

            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

        /// <summary>
        /// 執行一條不返回結果的SqlCommand,通過一個已經存在的數據庫事物處理
        /// 使用參數數組提供參數
        /// </summary>
        /// <remarks>
        /// 使用示例:
        ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="trans">一個存在的 sql 事物處理</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個數值表示此SqlCommand命令執行后影響的行數</returns>
        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

        /// <summary>
        /// 執行一條返回結果集的SqlCommand命令,通過專用的連接字符串。
        /// 使用參數數組提供參數
        /// </summary>
        /// <remarks>
        /// 使用示例:  
        ///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一個有效的數據庫連接字符串</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個包含結果的SqlDataReader</returns>
        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);

            // 在這里使用try/catch處理是因為如果方法出現異常,則SqlDataReader就不存在,
            //CommandBehavior.CloseConnection的語句就不會執行,觸發的異常由catch捕獲。
            //關閉數據庫連接,並通過throw再次引發捕捉到的異常。
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                conn.Close();
                throw;
            }
        }

        /// <summary>
        /// 執行一條返回第一條記錄第一列的SqlCommand命令,通過專用的連接字符串。
        /// 使用參數數組提供參數
        /// </summary>
        /// <remarks>
        /// 使用示例:  
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一個有效的數據庫連接字符串</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個object類型的數據,可以通過 Convert.To{Type}方法轉換類型</returns>
        public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }

        /// <summary>
        /// 執行一條返回第一條記錄第一列的SqlCommand命令,通過已經存在的數據庫連接。
        /// 使用參數數組提供參數
        /// </summary>
        /// <remarks>
        /// 使用示例:
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="conn">一個已經存在的數據庫連接</param>
        /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param>
        /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param>
        /// <returns>返回一個object類型的數據,可以通過 Convert.To{Type}方法轉換類型</returns>
        public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

            SqlCommand cmd = new SqlCommand();

            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }
        /// <summary>
        /// 緩存參數數組
        /// </summary>
        /// <param name="cacheKey">參數緩存的鍵值</param>
        /// <param name="cmdParms">被緩存的參數列表</param>
        public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
        {
            parmCache[cacheKey] = commandParameters;
        }

        /// <summary>
        /// 獲取被緩存的參數
        /// </summary>
        /// <param name="cacheKey">用於查找參數的KEY值</param>
        /// <returns>返回緩存的參數數組</returns>
        public static SqlParameter[] GetCachedParameters(string cacheKey)
        {
            SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

            if (cachedParms == null)
                return null;

            //新建一個參數的克隆列表
            SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

            //通過循環為克隆參數列表賦值
            for (int i = 0, j = cachedParms.Length; i < j; i++)
                //使用clone方法復制參數列表中的參數
                clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

            return clonedParms;
        }

        /// <summary>
        /// 為執行命令准備參數
        /// </summary>
        /// <param name="cmd">SqlCommand 命令</param>
        /// <param name="conn">已經存在的數據庫連接</param>
        /// <param name="trans">數據庫事物處理</param>
        /// <param name="cmdType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param>
        /// <param name="cmdText">Command text,T-SQL語句 例如 Select * from Products</param>
        /// <param name="cmdParms">返回帶參數的命令</param>
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {

            //判斷數據庫連接狀態
            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            //判斷是否需要事物處理
            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
            {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
    }
}

web.config文件

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <appSettings/>
    <connectionStrings>
        <add name="connstr" connectionString="Server=localhost;Database=test;Uid=sa;Pwd=!q2w3e4r5t;"/>
    </connectionStrings>
    <system.web>
        <!--
            設置 compilation debug="true" 可將調試符號插入
            已編譯的頁面中。但由於這會
            影響性能,因此只在開發過程中將此值
            設置為 true。
        -->
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>
        <!--
            通過 <authentication> 節可以配置 ASP.NET 用來
            識別進入用戶的
            安全身份驗證模式。
        -->
        <authentication mode="Windows"/>
        <!--
            如果在執行請求的過程中出現未處理的錯誤,
            則通過 <customErrors> 節可以配置相應的處理步驟。具體說來,
            開發人員通過該節可以配置
            要顯示的 html 錯誤頁
            以代替錯誤堆棧跟蹤。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
        在 Internet 信息服務 7.0 下運行 ASP.NET AJAX 需要 system.webServer
        節。對早期版本的 IIS 來說則不需要此節。
    -->
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <remove name="ScriptModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory"/>
            <remove name="ScriptHandlerFactoryAppServices"/>
            <remove name="ScriptResource"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </handlers>
    </system.webServer>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Android客戶端程序:

1、調用HelloWorld方法

頁面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lblShow"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="確定">
        
    </Button>
    <EditText
        android:id="@+id/txtName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />
    <Button
        android:id="@+id/btnName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ShowName" >
        
        
    </Button>
    

</LinearLayout>

代碼:

package com.awcf;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.gson.Gson;

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class AwcfActivity extends Activity {
    private TextView lblShow;
    private Button btnSave;
    private EditText txtName;
    private Button btnName;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lblShow=(TextView)findViewById(R.id.lblShow);
        btnSave=(Button)findViewById(R.id.btnSave);
        btnSave.setOnClickListener(new MyBtnListener());
        txtName = (EditText)findViewById(R.id.txtName);
        
        btnName=(Button)findViewById(R.id.btnName);
        btnName.setOnClickListener(new MyBtnNameListener());
        
    }
    class MyBtnNameListener implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            DefaultHttpClient client=new DefaultHttpClient();
            
            HttpPost requestget=new HttpPost("http://10.0.2.2:44625/WebService.asmx/GetPwdByName");
            requestget.setHeader("Accept", "application/json");
            requestget.addHeader("Content-Type", "application/json; charset=utf-8");
            JSONObject jsonParams=new JSONObject();
            try {
                jsonParams.put("name",txtName.getText().toString());
                jsonParams.put("pwd", "");
                HttpEntity bodyEntity=new StringEntity(jsonParams.toString(),"utf8");
                requestget.setEntity(bodyEntity);
                HttpResponse responsepost = client.execute(requestget);
                if(responsepost.getStatusLine().getStatusCode()==200){
                    String result=EntityUtils.toString(responsepost.getEntity());
                    JSONObject resultobj=new JSONObject(result.toString());
                    lblShow.setText(resultobj.get("d").toString());
                }else{
                    lblShow.setText("Name");
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }
    class MyBtnListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            Gson gson=new Gson();
            
            // TODO Auto-generated method stub
            DefaultHttpClient client=new DefaultHttpClient();
            
            HttpPost requestget=new HttpPost("http://10.0.2.2:44625/WebService.asmx/Helloworld");
            requestget.addHeader("Content-Type", "application/json; charset=utf-8");

            try {
                HttpResponse responseget=client.execute(requestget);
                if(responseget.getStatusLine().getStatusCode()==200){
                    String strresponse= EntityUtils.toString(responseget.getEntity());
                    JSONObject jsonObject = new JSONObject(strresponse.toString());
                    lblShow.setText(jsonObject.getString("d"));
                }else{
                    lblShow.setText("數據錯誤");
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                
            }
        }
        
    }
}

2、調用GetPwdByName方法

頁面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lblShow"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="確定">
        
    </Button>
    <EditText
        android:id="@+id/txtName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />
    <Button
        android:id="@+id/btnName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ShowName" >
        
        
    </Button>
    

</LinearLayout>

代碼:

package com.repair;

import java.io.IOException;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONStringer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class DefaultActivity extends Activity {
    private Button btnLogin;
    private EditText txtUserName;
    private EditText txtPwd;
    private Button btnRegister;
    private String connstr = "http://10.0.2.2:44625/WebService.asmx";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        txtUserName = (EditText) findViewById(R.id.txtUserName);
        txtPwd = (EditText) findViewById(R.id.txtPwd);
        btnLogin.setOnClickListener(new MybtnLoginListener());
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnRegister.setOnClickListener(new MybtnRegisterListener());
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        if (item.getItemId() == 1) {
            finish();
        } else if (item.getItemId() == 2) {
            item.setOnMenuItemClickListener(new MyitemAboutListener());
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        menu.add(0, 1, 1, R.string.Exit);
        menu.add(0, 2, 2, R.string.About);
        return super.onCreateOptionsMenu(menu);
    }

    // 登錄按鈕監聽事件
    class MybtnLoginListener implements OnClickListener {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            HttpPost request = new HttpPost(connstr + "/GetPwdByName");
            request.setHeader("Accept", "application/json");
            request.addHeader("Content-Type", "application/json; charset=utf-8");
            JSONObject jsonParams = new JSONObject();
            try {
                jsonParams.put("name", txtUserName.getText().toString().trim());
                // jsonParams.put("pwd",txtPwd.getText().toString().trim());
                HttpEntity bodyEntity = new StringEntity(jsonParams.toString(),
                        "utf8");
                request.setEntity(bodyEntity);
                DefaultHttpClient client = new DefaultHttpClient();
                HttpResponse responsepost = client.execute(request);
                if (responsepost.getStatusLine().getStatusCode() == 200) {
                    String result = EntityUtils.toString(responsepost
                            .getEntity());
                    JSONObject resultobj = new JSONObject(result)
                            .getJSONObject("d");
                    String pwd = resultobj.getString("Pwd");
                    if (pwd.trim().equals( txtPwd.getText().toString().trim())) {
                        // 登錄
                        int id = resultobj.getInt("Id");
                        Intent intent = new Intent();
                        intent.setClass(DefaultActivity.this,
                                MainActivity.class);
                        intent.putExtra("UserName", txtUserName.getText()
                                .toString());
                        intent.putExtra("id", id);
                        DefaultActivity.this.startActivity(intent);
                    } else {
                      
                    }
                } else {
                  
                }
            } catch (Exception e) {
              
            }
        }
    }

    // 退出按鈕監聽事件
    class MybtnRegisterListener implements OnClickListener {
        @Override
        public void onClick(View v) {
            // 程序退出
            Intent intent = new Intent();
            intent.setClass(DefaultActivity.this, RegisterActivity.class);
            intent.putExtra("UserName", txtUserName.getText().toString());
            DefaultActivity.this.startActivity(intent);
        }
    }

    class MyitemAboutListener implements OnMenuItemClickListener {

        @Override
        public boolean onMenuItemClick(MenuItem arg0) {
            // TODO Auto-generated method stub
            finish();
            return false;
        }

    }
}

3、調用GetRepairsList方法

頁面:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/mainactivity"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>


    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="fill_parent"
        android:layout_height="334dp"
        android:layout_x="0dp"
        android:layout_y="2dp"
        android:gravity="center_horizontal" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/lblRepairName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/RepairName"
                android:textColor="#ffffff"/>

            <Spinner
                android:id="@+id/spRepairList"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/lblStateName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/StateName"
                android:textColor="#ffffff"/>

            <Spinner
                android:id="@+id/spStateList"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
             <TextView
                android:id="@+id/lblUserName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/UserName"
                android:textColor="#ffffff"/>
            <TextView
                android:id="@+id/txtUserName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffff" >
            </TextView>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <Button
                android:id="@+id/btnSave"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/Save"
                android:textColor="#ffffff" />
            <Button
                android:id="@+id/btnCancle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/Cancle"
                android:textColor="#ffffff" />
        </TableRow>
    </TableLayout>

</AbsoluteLayout>

代碼:

package com.repair;

import java.io.IOException;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.*;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
import android.widget.AdapterView.OnItemSelectedListener;

public class MainActivity extends Activity {
    private TextView txtUserName;
    private int UserId;
    private int RepairId;
    private Spinner spRepairList;
    private String connstr = "http://10.0.2.2:44625/WebService.asmx";

    /*
     * (non-Javadoc)
     *
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        txtUserName = (TextView) findViewById(R.id.txtUserName);
        txtUserName.setText(getUserName());
        spRepairList = (Spinner) findViewById(R.id.spRepairList);
        getRepairsList();
    }

    private String getUserName() {
        String UserName = "";
        Intent intent = getIntent();
        UserName = intent.getStringExtra("UserName");
        return UserName;
    }

    //UserID
    private int getId() {
        Intent intent = getIntent();
        UserId = intent.getIntExtra("id", 0);
        return UserId;
    }

    private void getRepairsList() {
        HttpPost request = new HttpPost(connstr + "/GetRepairsList");
        request.setHeader("Accept", "application/json");
        request.addHeader("Content-Type", "application/json; charset=utf-8");
        DefaultHttpClient client = new DefaultHttpClient();
        HttpResponse responsepost;
        try {
            responsepost = client.execute(request);
            if (responsepost.getStatusLine().getStatusCode() == 200) {
                String result = EntityUtils.toString(responsepost.getEntity());
                JSONArray array = new JSONObject(result).getJSONArray("d");
                List<RepairsModel> list = new ArrayList<RepairsModel>();
                for (int i = 0; i < array.length(); i++) {
                    JSONObject obj = (JSONObject) array.get(i);
                    RepairsModel model = new RepairsModel(obj.getInt("Id"),
                            obj.getString("RepairName"));
                    list.add(model);
                }
                ArrayAdapter<RepairsModel> adapter = new ArrayAdapter<RepairsModel>(
                        this, android.R.layout.simple_spinner_item, list);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spRepairList.setAdapter(adapter);
                spRepairList.setPrompt("選項");
                spRepairList
                        .setOnItemSelectedListener(new OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> arg0,
                                    View arg1, int arg2, long arg3) {
                                // TODO Auto-generated method stub
                                RepairId=((RepairsModel)spRepairList.getSelectedItem()).getId();
                                Toast.makeText(
                                        MainActivity.this,
                                        "鍵:"
                                                + spRepairList
                                                        .getSelectedItem()
                                                        .toString()
                                                + "、"
                                                + ((RepairsModel) spRepairList
                                                        .getSelectedItem())
                                                        .getId()
                                                + ",值:"
                                                + ((RepairsModel) spRepairList
                                                        .getSelectedItem())
                                                        .getRepairName(),
                                        Toast.LENGTH_LONG).show();
                            }

                            public void onNothingSelected(AdapterView<?> parent) {

                            }

                        });

            } else {

            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Repair類:

package com.repair;

import java.io.Serializable;
import java.util.Date;

public class RepairsModel implements Serializable {
    
    public RepairsModel(int id,String repairname){
        super();
        this.id=id;
        this.repairName=repairname;
    }
    
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    private String repairName;
    
    public String getRepairName() {
        return repairName;
    }

    public void setRepairName(String repairName) {
        this.repairName = repairName;
    }
    public String toString(){
        return repairName;
    }
    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM