android开发怎么少的了后端(中)

序言:上一篇中咱们讲了简单后端开发所必须的一些工具以及讲解,若是你尚未了解的话,请移步android开发怎么少的了后端(上)

今天给你们带来的是客户端与服务器端的通讯,话很少说,直接上例子: 今天咱们实现一个注册的功能,客户端的界面编写神马的咱就不在这浪费时间了,我这也直接写好了,一个最简单的注册和登陆界面:html

界面写好以后,接下来我们就去弄接口了。mysql

首先,先把数据库搞好,上一篇介绍的两个mysql的软件仍是很好用的,不用写数据库语句就能直接建立表,固然了,你也可使用建表语句来建立,开心就好!

好了表建立好了。android

接下来咱们打开eclipse j2ee,新建一个web工程

而后在src下建立三个包,一个放Servlet,一个放mysql的工具类,一个放对象;web

  1. 这里咱们采用jdbc链接,没有jdbc包的请看这边:点我下载JDBC jar包
  2. 由于咱们要将结果以json的形式传给客户端,因此咱们还须要一个gson的包,没有gson包的请看这边:点我下载gson jar包

而后咱们开始写数据库的工具类:sql

public class DBUtils {
	private Connection conn;
	private String url = "jdbc:mysql://127.0.0.1:3306/Login"; // 指定链接数据库的URL
	private String user = "root"; // 指定链接数据库的用户名
	private String password = "1002"; // 指定链接数据库的密码

	private Statement sta;
	private ResultSet rs;

	// 打开数据库链接
	public void openConnect() {
		try {
			// 加载数据库驱动
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);// 建立数据库链接
			if (conn != null) {
				System.out.println("数据库链接成功"); // 链接成功的提示信息
			}
		} catch (Exception e) {
			System.out.println("ERROR: " + e.getMessage());
		}
	}
	//得到查询user表后的数据集
	public ResultSet getUser() {
		// 建立 statement对象
		try {
			sta = conn.createStatement();
			// 执行SQL查询语句
			rs = sta.executeQuery("select * from user");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	// 判断数据库中是否存在某个用户名及其密码,注册和登陆的时候判断
	public boolean isExistInDB(String username, String password) {
		boolean isFlag = false;
		// 建立 statement对象
		try {
			sta = conn.createStatement();
			// 执行SQL查询语句
			rs = sta.executeQuery("select * from user");//得到结果集
			if (rs != null) {
				while (rs.next()) {  //遍历结果集
					if (rs.getString("user_name").equals(username)) {
						if (rs.getString("user_pwd).equals(password)){
							isFlag = true;
							break;
						}
					}
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
			isFlag = false;
		}
		return isFlag;
	}
	
	//注册  将用户名和密码插入到数据库(id设置的是自增加的,所以不须要插入)
	public boolean insertDataToDB(String username, String password){
		String sql = " insert into user ( user_name , user_pwd ) values ( " + "'" + username
				+ "', " + "'" + password + "' )";
		try {
			sta = conn.createStatement();
			// 执行SQL查询语句
			return sta.execute(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}

	// 关闭数据库链接
	public void closeConnect() {
		try {
			if (rs != null) {
				rs.close();
			}
			if (sta != null) {
				sta.close();
			}
			if (conn != null) {
				conn.close();
			}
			System.out.println("关闭数据库链接成功");
		} catch (SQLException e) {
			System.out.println("Error: " + e.getMessage());
		}
	}
}
复制代码

注:上述的数据库语句不要写错了,该空格的地方不要省地方,不然的话会报错的数据库

好了,到此咱们的数据库的工具类就写好了,若是不太懂的能够看注释,应该能够看懂json

接下来咱们要写Servlet了

偷个懒,咱们直接写doPost()方法,在doGet()方法中也执行doPost()方法后端

protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	String username = request.getParameter("username"); // 获取客户端传过来的参数
	String password = request.getParameter("password");
	
	if (username == null || username.equals("") || password == null || password.equals("")) {
		System.out.println("用户名或密码为空");
		return;
	}

	// 请求数据库
	DBUtils dbUtils = new DBUtils();
	dbUtils.openConnect(); // 打开数据库链接
	BaseBean data = new BaseBean(); // 基类对象,回传给客户端的json对象
	UserBean userBean = new UserBean();   //user的对象
	if (dbUtils.isExistInDB(username, password)) { // 判断帐号是否存在
		data.setCode(-1);
		data.setData(userBean);
		data.setMsg("该帐号已存在");
	} else if (!dbUtils.insertDataToDB(username, password)) { // 注册成功
		data.setCode(0);
		data.setMsg("注册成功!!");
		ResultSet rs = dbUtils.getUser();
		int id = -1;
		if (rs != null) {
			try {
				while (rs.next()) {
					if (rs.getString("user_name").equals(username) && rs.getString("user_pwd").equals(password)) {
						id = rs.getInt("user_id");
					}
				}
				userBean.setId(id);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		userBean.setUsername(username);
		userBean.setPassword(password);
		data.setData(userBean);
	} else { // 注册不成功,这里错误没有细分,都归为数据库错误
		data.setCode(500);
		data.setData(userBean);
		data.setMsg("数据库错误");
	}
	Gson gson = new Gson();
	String json = gson.toJson(data);  //将对象转化成json字符串
	try {
		response.getWriter().println(json); // 将json数据传给客户端
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		response.getWriter().close(); // 关闭这个流,否则会发生错误的
	}
	dbUtils.closeConnect(); // 关闭数据库链接
}
复制代码

好了,Servlet也写好了,而后咱们能够运行一下:服务器

至于回传给客户端的json基类对象,以下:eclipse

public class BaseBean{
	private int code;
	private String msg;
	private Object data;
	public int getCode() {
		return code;
	}
	public void setCode(int code) {
		this.code = code;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
}
复制代码

看请求的url:http://localhost:8080/MyWeb/RegisterServlet

咦!怎么报404的错了,什么鬼呢,别急>_<我们参数尚未传呢:

这就对了!此处应该有掌声👏👏👏至于中文乱码,下文我会来解释;咱们再来看看数据库,看看是否是有一条新的记录呢:

的确是有的,好,如今数据是能够出来了,可是咱们须要到客户端去请求,看看是否是也能够请求呢?

首先,请求的url再也不是http://localhost:8080/MyWeb/RegisterServlet,由于手机不能识别localhost,咱们换成电脑的IP地址,例如个人电脑ip地址为:192.168.0.106,因此,如今请求的url变成了http://192.168.0.106:8080/MyWeb/RegisterServlet,而后参数分别是usernamepassword

android客户端的请求方法在这里我也不详细介绍了,相信你们应该都会,在这里我用的是简单易懂的asynchttpclient进行请求的,稍微进行了一下封装:

String url = "http://192.168.0.106:8080/MyWeb/RegisterServlet";
    RequestParams params = new RequestParams();
    params.put("username", arEtUsername.getText().toString());
    params.put("password", arEtPassword.getText().toString());
    RequestUtils.ClientPost(url, params, new NetCallBack() {
        @Override
        public void onMySuccess(byte[] response) {
        	 Lod.d(TAG,"register success and json---->"+new String(response));
             Toast.makeText(this,"json="+new String(response),Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onMyFailure(byte[] response, Throwable throwable) {
            Log.e(TAG,new String(response)+"\n"+ throwable.toString());
        }
    });
复制代码

好,来看看咱们的效果吧!

咦!!!怎么会是乱码呢?原来是没有设置请求头部的编码,咱们来看:

response.setHeader("Content-Type", "text/html;charset=UTF-8");
复制代码

只须要在doPost()方法中加上这一句就能够了,下面来看:

OK,成功了,接下来咱们去数据库里面看看,有没有那条记录:

确定是有的啦!这样,咱们就成功的写完了一个小型的注册接口,是否是忍不住想赶忙试一下呢?

公众号:Android技术经验分享
相关文章
相关标签/搜索