zoukankan      html  css  js  c++  java
  • 教你一步一步做无线点餐项目(登录篇)

    原文链接: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

  • 相关阅读:
    node.js 建立live-server
    Django 反向解析
    Boost智能指针——weak_ptr
    boost::intrusive_ptr原理介绍
    shared_ptr 的使用及注意事项
    小感
    JQ对页面中某个DIV的大小变化进行监听
    使用java Apache poi 根据word模板生成word报表
    字节byte自适应转换为B、KB、MB、GB、TB
    jq实现 元素显示后 点击页面的任何位置除元素本身外 隐藏元素
  • 原文地址:https://www.cnblogs.com/vus520/p/2624852.html
Copyright © 2011-2022 走看看