java 安卓 接口怎么写_Android开发者怎么能不会写后台接口呢?

界面

今天我们实现一个注册的功能,客户端的界面编写神马的咱就不在这浪费时间了,我这也直接写好了,一个最简单的注册和登录界面:

界面写好之后,接下来咱们就去弄接口了。

数据库

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

好了表创建好了。

工具

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

然后在src下创建三个包,一个放Servlet,一个放mysql的工具类,一个放对象;因为我们要将结果以json的形式传给客户端,所以我们还需要一个gson的包,没有gson包的请看这边:

然后我们开始写数据库的工具类:

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());

}

}

}

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

好了,到此我们的数据库的工具类就写好了,如果不太懂的可以看注释,应该可以看懂

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基类对象,如下:

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变成了username和password。

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,成功了,接下来我们去数据库里面看看,有没有那条记录:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值