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

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

你可能感兴趣的:(登录)