作者 by admin / 2022-09-14 / 暂无评论 / 2128 个足迹
题目
使用Android Studio写一个登录界面,需要包含账号输入框,密码输入框,登录和注册按钮。
登录时若密码错误或者不存在这个账号需要给用户反馈,登录成功后跳转到另外一个页面。
注:登录所需的数据在我提供的云数据库上,账号密码请看群
学习网址:https://www.runoob.com/java/java-mysql-connect.html
jar包请看群文件
中等:实现登录、注册功能,登录成功后跳转
所需知识:
MySQL:基础语法(仅需要了解select和insert即可)
Java:List的基本知识,MySQL连接
Android:EditText控件,LinearLayout布局,Intent的跳转,子线程的编写,异步处理(handler)
较难:在中等的前提下,实现跳转界面展示数据库里的数据
中等前提下还需要你掌握:
Intent的传值,java序列化(Serializable),布局服务(LayoutInflater)
解
题目不难,总体上是几个模块聚合到一起。
首先我们来解决数据库访问的问题,这里需要我们访问数据库并读取数据,首先将jdbc驱动引入,参考网址。
初始化数据库驱动:
//JDBC 驱动名
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//数据库读写外网地址
static final String DB_URL = "数据库链接";
//账号密码
static final String USER = "数据库账号";
static final String PASS = "数据库密码";
Connection connection = null;
Statement statement = null;
String sql=null;
MySQL(){
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DB_URL,USER,PASS);
statement = connection.createStatement();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
登录所需的数据库函数(数据库的密码为了演示,是明文存储,正常情况下会加密):
/**
* 验证账号密码是否正确
* @param account
* 账号
* @param password
* 密码
* @return
* 返回值为账号密码是否正确
*/
public boolean Login(String account,String password){
sql = "SELECT password FROM account WHERE account='"+account+"'";//查询语句
try {
ResultSet rs = statement.executeQuery(sql);//如果没有这个值就catch error
//因为一个账号对应一个密码
rs.next();
String sql_pass = rs.getString("password");
rs.close();
return password.equals(sql_pass);
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
注册所需的数据库函数(同登录一样,只不过是将select语句换为insert语句):
/**
* 注册账号
* @param account
* 账号
* @param password
* 密码
* @return
* 返回值为注册是否成功
*/
public boolean Register(String account,String password){
//由于account是主键,所以不会有重复
sql = "INSERT INTO account VALUES('"+account+"','"+password+ "')";//插入语句
try {
statement.executeUpdate(sql);
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
到这里大体上将数据库所需要的函数写完了
随后需要写登录所需的逻辑,因为Android4.0以后不支持在主线程进行耗时操作,因此,如果设备是4.0版本以上的,要新开一条线程操作数据库,同时使用异步处理将操作反馈到界面,即:
handler=new android.os.Handler(){
public void handleMessage(Message message){
//异步处理
}
};
log_btu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//按钮点击事件
new Thread() {
@Override
public void run() {
//子线程操作
}
}.start();
}
});
最后在账号密码正确的情况下跳转到新的页面,这里为包含传值的Intent显式跳转方法:
Intent intent = new Intent(MainActivity.this, TextActivity.class);
intent.putExtra("list",(Serializable) list);//向下一个页面传值
startActivity(intent);
动态布局由于篇幅的关系就不在此单独写出,请自行上网查找资料,这里只给出示例代码:
LayoutInflater inflater=LayoutInflater.from(this);
LinearLayout text=inflater.inflate(R.layout.text_layout,null).findViewById(R.id.text);
TextView name=text.findViewById(R.id.name);
name.setText(list.get(i));//设置布局里的文字
infobox.addView(text);//添加布局
最后,一定不要忘记在Manifest文件里写入联网权限,否则不能访问云数据库:
<uses-permission android:name="android.permission.INTERNET" />
我写的工程文件如下:
sql.zip
评论已关闭