当前位置: 首页 > news >正文

Android项目之无线点餐(2)--用户登录的客户端和服务器端实现

一、服务器端实现

(1)创建动态服务器项目


个部分代码如下:

package com.lc.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionUtil {

	/**
	 * 打开连接
	 * 
	 * @return
	 */
	public static Connection open() {
		// 1.url
		// 2.driver
		// 3.username
		// 4.password
		// 配置文件xml 属性文件Properties

		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/wiressorder?useUnicode=true&characterEncoding=gbk";
		String username = "xuuu";
		String password = "1234567890";

		try {

			Class.forName(driver);
			return DriverManager.getConnection(url, username, password);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 关闭连接
	 * 
	 * @param conn
	 */
	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

package com.lc.dao;

/*
 * 对应数据库中的user表
 * 
 * Entity Class或者是JavaBean---UserTabl ORM
 */
public class User {
	private String username;
	private String password;
	private int id;

	/*
	 * 无参的构造方法
	 */
	public User() {
		super();
	}

	/*
	 * 有参的构造方法
	 */

	public User(String username, String password, int id) {
		super();
		this.username = username;
		this.password = password;
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}

package com.lc.dao;

/*
 * UserDao接口
 * 
 * 定义于User有关的方法
 */
public interface UserDao {
	// 实现用户登录
	public User login(String username, String password);
}
package com.lc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
 * 用于实现UserDao中定义的方法
 * 
 * 接口的实现类
 */
public class UserDaoImpl implements UserDao {

	@Override
	public User login(String username, String password) {
		Connection connection = ConnectionUtil.open();
		String sql = "select id,username,password from UserTbl where username=? and password=?";
		try {
			// 预查寻
			PreparedStatement pstmt = connection.prepareStatement(sql);
			pstmt.setString(1, username);
			pstmt.setString(2, password);

			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				int id = rs.getInt(1); // 获得一个用户的id
				User user = new User();
				// 设置数据
				user.setId(id);
				user.setUsername(username);
				user.setPassword(password);

				return user;
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			ConnectionUtil.close(connection);
		}

		return null;
	}
}
package com.lc.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lc.dao.User;
import com.lc.dao.UserDao;
import com.lc.dao.UserDaoImpl;

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response); // 都执行dopost
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html;charset=utf8"); // 设置编码方式
		PrintWriter out = response.getWriter();

		// 获得登录的请求信息
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		// 打印出来测试:http://localhost:8080/WiressOrderServer/LoginServlet?username=tom&password=123
		// System.out.println("username:" + username + "password:" + password);

		UserDao userDao = new UserDaoImpl();
		User user = userDao.login(username, password);
		if (user != null) {
			System.out.println("username:" + user.getUsername() + "password:"+ user.getPassword());
			out.println("username:" + user.getUsername() + "password:"+ user.getPassword());
		} else {
			System.out.println("没有你所要的用户,登录失败!");
			out.println("没有你所要的用户,登录失败!");

		}
		out.flush();
		out.close();
	}

}

二、客户端实现


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login_password" />

        <EditText
            android:id="@+id/ed_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login_username" />

        <EditText
            android:id="@+id/ed_password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPassword" >

            <requestFocus />
        </EditText>
    </LinearLayout>

    <Button
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/login_loginbutton" />

</LinearLayout>



package com.xuliugen.wiressorderclient;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class HttpUtil {

	public static String doPost(String url, List<NameValuePair> list) {
		HttpPost post = new HttpPost(url);
		HttpEntity entity = null;
		if (list != null) {
			try {
				entity = new UrlEncodedFormEntity(list, "gbk");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			post.setEntity(entity);
		}

		HttpClient client = new DefaultHttpClient();
		try {
			HttpResponse response = client.execute(post);
			if (response.getStatusLine().getStatusCode() == 200) {
				String result = EntityUtils.toString(response.getEntity());
				// save SharedPre...
				result = new String(result.getBytes("iso-8859-1"), "gbk");
				System.out.println(result);
				return result;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}

package com.xuliugen.wiressorderclient;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {
	private EditText usernameEditText, passwordEditText;
	private Button login_button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		usernameEditText = (EditText) this.findViewById(R.id.ed_username);
		passwordEditText = (EditText) this.findViewById(R.id.ed_password);
		login_button = (Button) this.findViewById(R.id.login_button);

		login_button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String url = "http://172.23.252.89:8080/WiressOrderServer/LoginServlet";
				// 执行异步任务
				new MyTask().execute(url);
			}
		});
	}

	String doLogin(String url) {

		String username = usernameEditText.getText().toString();
		String password = passwordEditText.getText().toString();

		// 1.apache client
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		NameValuePair p1 = new BasicNameValuePair("username", username);
		NameValuePair p2 = new BasicNameValuePair("password", password);
		list.add(p1);
		list.add(p2);

		String msg = HttpUtil.doPost(url, list);

		return msg;

	}

	// 多线程的使用:hander、Asynctask
	class MyTask extends AsyncTask<String, Integer, String> {

		@Override
		protected String doInBackground(String... params) {
			String url = params[0];
			String result = doLogin(url);
			return result;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			// 1.保存信息
			Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT)
					.show();
		}

	}
}




相关文章:

  • 千变万化的ViewPager切换动画(1)--仅支持3.0以上版本的官方方法
  • Canopy聚类算法与Mahout中的实现
  • Android基础学习—下载并在Eclipse中关联Android源码
  • 【html】【11】函数名称约束规范
  • 千变万化的ViewPager切换动画(2)--自定义ViewPager的实现方法
  • 二叉树习题之重建二叉树
  • WebView的简单入门
  • 持续集成
  • Android开发Eclipse连接真机
  • 吐槽贴-微信公众号那些让人想起神兽的坑
  • No orientation specified, and the default is horizontal.
  • Java代码实现随机生成汉字
  • (转)负载均衡,回话保持,cookie
  • js跨域及解决方案
  • Daily Scrumming* 2015.12.13(Day 5)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android开源项目规范总结
  • extjs4学习之配置
  • k8s 面向应用开发者的基础命令
  • swift基础之_对象 实例方法 对象方法。
  • ubuntu 下nginx安装 并支持https协议
  • webgl (原生)基础入门指南【一】
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 缓存与缓冲
  • 基于游标的分页接口实现
  • 你真的知道 == 和 equals 的区别吗?
  • 入门到放弃node系列之Hello Word篇
  • 深入浅出webpack学习(1)--核心概念
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • # 飞书APP集成平台-数字化落地
  • #Linux(权限管理)
  • #stm32整理(一)flash读写
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (三)docker:Dockerfile构建容器运行jar包
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)SpringBoot3---尚硅谷总结
  • (一)基于IDEA的JAVA基础12
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • .Net - 类的介绍
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net 无限分类
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @ConfigurationProperties注解对数据的自动封装
  • [ C++ ] STL---仿函数与priority_queue
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C++] sqlite3_get_table 的使用
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [LeetCode]-283. 移动零-1089. 复写零
  • [Real world Haskell] 中文翻译:前言