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;
}
}