教你一步一步做无线点餐项目(登录篇)

2024-06-06 03:58

本文主要是介绍教你一步一步做无线点餐项目(登录篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:http://www.eoeandroid.com/thread-189017-1-1.html

项目名称:无线点餐系统客户端准备工具:Eclipse4.2(我是4.2的,你们可以3.5,3.6都没问题),ADT20,SDK20
服务端准备工具:Myeclipse,MySQL以及Navicat 8 for MSQL和Tomcat

项目需求:传统的餐饮行业,一般都是餐厅服务员人工完成的,过程为顾客进入餐厅坐下后,服务员点菜,然后菜单交给厨师,厨师开始做菜,这过程在小饭馆可以,大饭馆就不行了。所以为了解决这个问题,特此推出了无线点餐系统,由无线路由器和服务器组成。

系统结构:Android通过无线网络访问后台服务器,技术:客户端采用java,web采用servlet,通信使用Tomcat

系统功能:登录,主菜单,点餐,结算,查台,更新,并,转台

客户端部分:
那今天讲讲登录功能,为提高安全性,登录是通过网络,在后台通过数据库将用户名密码进行查询,如匹配可以进入主菜单,不符合的告示用户名和密码错误。我光是登录就弄了一晚上。首先是在客户端创建android项目,名叫如WirelesOrder_Client,接着创建三个包:com.amaker.wlo存放各个Activity;provider存放本地数组库,util存放工具包,那布局创建一个login的,外层是线性布局,里面套个表格布局,具体如下:

 

<?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:background="@drawable/login"
android:orientation="vertical" >
<TableLayout
android:layout_marginTop="130dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:stretchColumns="1" >
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textColor="#0000ff" />
<EditText
android:id="@+id/usernameEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textColor="#0000ff" />
<EditText
android:id="@+id/passEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true" />
</TableRow>
<TableRow>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消" />
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登陆" />
</TableRow>
</TableLayout>
</LinearLayout>

其次在activity声明各个组建以及findviewbyid寻找ID。下面开始就是重点了,实现后台数据库访问,方法很多,我们采用Http请求HttpResquest和HttpRsponse对象,以及发送get和post返回信息:

 

package com.amaker.util;
public class HttpUtil {
// 基础URL
public static final String BASE_URL="http://这里是你的IP地址:端口号/服务器项目名/";
// 获得Get请求对象request
public static HttpGet getHttpGet(String url){
HttpGet request = new HttpGet(url);
return request;
}
// 获得Post请求对象request
public static HttpPost getHttpPost(String url){
HttpPost request = new HttpPost(url);
return request;
}
// 根据请求获得响应对象response
public static HttpResponse getHttpResponse(HttpGet request) throws ClientProtocolException, IOException{
HttpResponse response = new DefaultHttpClient().execute(request);
return response;
}
// 根据请求获得响应对象response
public static HttpResponse getHttpResponse(HttpPost request) throws ClientProtocolException, IOException{
HttpResponse response = new DefaultHttpClient().execute(request);
return response;
}
// 发送Post请求,获得响应查询结果
public static String queryStringForPost(String url){
// 根据url获得HttpPost对象
HttpPost request = HttpUtil.getHttpPost(url);
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}
// 获得响应查询结果
public static String queryStringForPost(HttpPost request){
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}
// 发送Get请求,获得响应查询结果
public static  String queryStringForGet(String url){
// 获得HttpGet对象
HttpGet request = HttpUtil.getHttpGet(url);
String result = null;
try {
// 获得响应对象
HttpResponse response = HttpUtil.getHttpResponse(request);
// 判断是否请求成功
if(response.getStatusLine().getStatusCode()==200){
// 获得响应
result = EntityUtils.toString(response.getEntity());
return result;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
result = "网络异常!";
return result;
} catch (IOException e) {
e.printStackTrace();
result = "网络异常!";
return result;
}
return null;
}

就这个在HttpPost获取对象始终是空指针。后面复制人家的居然好了- -。这不是在坑我嘛,就是URL地址你改成你自己的IP地址就行了。下面在登录功能定义几个方法:

showDialog()方法:用于显示对话框

        // 创建一个对话框
private void ShowDialog(String msg) {
AlertDialog.Builder bulider = new AlertDialog.Builder(this);
bulider.setMessage(msg);
bulider.setCancelable(false);
bulider.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {                           
}
}).show();
}

validate方法:验证用户名和密码是否正确

// 验证用户是否正确
private boolean vaildate() {
String username = user.getText().toString();
if (username.equals("")) {
ShowDialog("用户必须填");
return false;
}
String pwd = passwords.getText().toString();
if (pwd.equals("")) {
ShowDialog("密码必须填");
return false;
}
return true;
}

query:发送post请求,获取响应结果,通过用户名和密码进行查询

private String query(String username, String password) {
//查询字符串
String queryString = "username=" + username  +"&password="+password;
//查询URL
String url = HttpUtil.BASE_URL + "/servlet/LoginServlet?" + queryString;
//返回结果
return HttpUtil.queryStringForPost(url);
}

saveUserMsg:将查询结果保存到xml配置文件里,以便在后面的点餐中使用用户信息,login方法可以调用saveUsermsg方法:

 

rivate void saveUserMsg(String msg) {
String id = "";
// 用户名称
String name = "";
// 获得信息数组
String[] msgs = msg.split(";");
int idx = msgs[0].indexOf("=");
id = msgs[0].substring(idx+1);
idx = msgs[1].indexOf("=");
System.out.println("idx-----"+idx);
name = msgs[1].substring(idx+1);
// 共享信息
SharedPreferences pre = getSharedPreferences("user_msg", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = pre.edit();
editor.putString("id", id);
editor.putString("name", name);
editor.commit();
}
//登录方法
private boolean login() {
String username = user.getText().toString();
String password = passwords.getText().toString();
String result = query(username, password);
if (result!=null&&result.equals("0")) {
return false;
}else {
saveUserMsg(result);
return true;
}

在登录按钮加监听,先调用validate验证再通过login,如成功进入主菜单,反之提示登录失败信息

 

logining.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (vaildate()) {
if (login()) {
Intent intent=new Intent(LoginActivity.this,MainAcitivity.class);
startActivity(intent);
}else {
ShowDialog("用户名或者密码输入错误,请重新输入");                                    
}
}
}
});

 

后续继续更新。

   

 

 

 特别推荐:

漂亮的快捷拨打电话的widget程序
http://www.eoeandroid.com/thread-176096-1-1.html

二级下拉菜单+快速搜索
http://www.eoeandroid.com/thread-163892-1-1.html

关于第三方控件ViewFlow的用法总结
http://www.eoeandroid.com/thread-157603-1-1.html

这篇关于教你一步一步做无线点餐项目(登录篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035031

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

无线领夹麦克风什么牌子好用?揭秘领夹麦克风哪个牌子音质好!

随着短视频行业的星期,围绕着直播和视频拍摄的电子数码类产品也迎来了热销不减的高增长,其中除了数码相机外,最为重要的麦克风也得到了日益增长的高需求,尤其是无线领夹麦克风,近几年可谓是异常火爆。别看小小的一对无线麦克风,它对于视频拍摄的音质起到了极为关键的作用。 不过目前市面上的麦克风品牌种类多到让人眼花缭乱,盲目挑选的话容易踩雷,那么无线领夹麦克风什么牌子好用?今天就给大家推荐几款音质好的

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免