// 通过findViewById方法实例化组件
userEditText = (EditText)findViewById(R.id.userEditText); // 通过findViewById方法实例化组件
pwdEditText = (EditText)findViewById(R.id.pwdEditText);
4) 为了实现登录的功能,Android需要通过网络方位后台数据库进行查询。Android访问网络实现的方法有很多,如Web Service、HTTP、直接使用WebView浏览器。Android集成了Apache的Http Client模块,这样使得使用HTTP访问网络成为了可能。这里我们使用HTTP访问网络。HTTP是请求(request)/响应(response)的一种机制,这里我们定义了一种工具类HttpUtil来获得HttpResquest对象和HttpResponse对象,以及发送get和post请求获得返回response信息的方法。
5) 定义一个显示信息的对话框方法,用于显示提示信息。
private void showDialog(String msg){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(msg) .setCancelable(false)
.setPositiveButton(\确定\ public void onClick(DialogInterface dialog, int id) { } });
AlertDialog alert = builder.create(); alert.show();
6) 定义validate()方法,对用户名和密码进行验证。
private boolean validate(){ String username = userEditText.getText().toString();
14
}
if(username.equals(\
showDialog(\用户名称是必填项!\ return false; }
String pwd = pwdEditText.getText().toString(); if(pwd.equals(\ showDialog(\用户密码是必填项!\ return false; }
return true;
7) 定义一个query()方法,通过用户名称和密码进行查询,发送Post请求,获得响应结果
// 根据用户名称密码查询 private String query(String account,String password){ } }
// 查询参数
String queryString = \// url
String url = HttpUtil.BASE_URL+\// 查询返回结果
return HttpUtil.queryStringForPost(url);
8) 定义login()方法,该方法调用query()方法,获得查询结果,并将查询结果通过SharedPreferences()保存到XML配置文件,一边在后面程序的点餐中使用用户信息。Login()方法调用saveUserMsg()方法将用户信息保存到配置文件中。
// 将用户信息保存到配置文件 private void saveUserMsg(String msg){ // 用户编号 String id = \ // 用户名称 String name = \ // 获得信息数组 String[] msgs = msg.split(\ int idx = msgs[0].indexOf(\
15
id = msgs[0].substring(idx+1); idx = msgs[1].indexOf(\ name = msgs[1].substring(idx+1); // 共享信息 SharedPreferences pre = getSharedPreferences(\MODE_WORLD_WRITEABLE); SharedPreferences.Editor editor = pre.edit(); editor.putString(\ editor.putString(\ editor.commit(); }
9) 为登录的按钮添加监听器,在onClick()方法中,首先调用validate()方法进行验证,如果验证通过在调用login()方法,如果登陆成功,系统将进入主菜单界面否则提示登录失败。如果验证事失败提示失败信息,请求用户重新输入。
loginBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(validate()){ if(login()){ Intent intent Intent(LoginActivity.this,MainMenuActivity.class); startActivity(intent); }else{
}
} }
= new
showDialog(\用户名称或者密码错误,请重新输入!\
10) 为取消按钮添加单击监听器,在onClick()方法中
调用finish()方法结束该Activity。
cancelBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } });
16
11) 运行结果如图3-1.1
图3-1.1
2. 登陆模块服务器端实现
后台的服务器实现采用JDBC访问后台数据库,Servlet响应HttpRequest请求,并返回响应结果。 要完成登录模块服务器实现需要如下步骤。 1) 创建一个名称为“WirelessOrder-Server”的Web工程。
2) 创建程序需要的包结构。Dao包用于放置采用DAO设计模式的实现访问数据库接口及其实实现类,entity包用于放置对应数据库表的实体类;servlet包用于放置Servlet类;filter包用于放置过
17
滤器;until包是工具类。其内容如图3-2.1所示 3) 创建访问数据库工具类DBUtil,该类的主要功能打开和关闭数据库连接。为了程序更具有可扩展性,我们将配置信息保存到配置文件当中,这样可以在不修改程序的前提下一直数据库。DBUtil工具类内容如下所示。
4) 创建用于封装UserTbl类信息的实体Usr类
package com.amaker.util;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** *
* @author hz.guo * 数据库工具类 */
public class DBUtil {
/*
* 关闭数据库连接 */
public void closeConn(Connection conn){ } /*
* 打开数据库连接 */
public Connection openConnection() {
18
try { }
conn.close();
e.printStackTrace(); } catch (SQLException e) {