Android Studio实现Mysql(5.7)数据库增删改查(下)——用Bcrypt Hash实现数据库密码加密及验证,展示用户条目并实现增删改查

目录

用Java实现移动端(Android)哈希Bcrypt加密

完整增删改查案例(自定义适配器、listview等)


来得晚的小伙伴们请先看上集:(35条消息) Android Studio实现Mysql(5.7)数据库增删改查(上)——用户登录功能实现_TidesWise的博客-CSDN博客

用Java实现移动端(Android)哈希Bcrypt加密

1、在libs文件夹下添加jbcrypt-0.4.jar包,具体资源自行互联网下载,再右键add as Library,具体操作参见上集;

2、在CommonUtils添加以下两个方法,用以得到哈希加密的密码和验证用户输入密码是否与数据库中加密密码一致;注意引入jbcrypt:

import org.mindrot.jbcrypt.BCrypt;

public static String getBcryptHash(String spassword) {
    String encodePwd = BCrypt.hashpw(spassword, BCrypt.gensalt()); // 加密,核心代码
    return encodePwd;
}
public static boolean checkPw(String spassword, String hashedPw) {
    boolean flag = BCrypt.checkpw(spassword, hashedPw); // 验证加密是否正确
    return flag;
}

3、淘汰StudentDao.java类中的getUserByLogin方法,新增getUserBySid方法;

   public StudentInfo getUserBySid(String sid) {
        StudentInfo item = null;
        try {
            getConnection();
            String sql = "select * from student where sid=?";
            pStmt = conn.prepareStatement(sql);
            pStmt.setString(1, sid);
            rs = pStmt.executeQuery();
            if (rs.next()) {
                item = new StudentInfo();
                item.setSid(sid);
                item.setSpassword(rs.getString("spassword"));
                item.setSname(rs.getString("sname"));
                item.setSgender(rs.getString("gender"));
                item.setSlocation(rs.getString("slocation"));
                item.setSphone(rs.getString("sphone"));
                item.setSemail(rs.getString("semail"));
                item.setCid(rs.getString("cid"));
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            closeAll();
        }
        return item;
    }

4、自此在登陆操作时,我们只需通过getUserBySid方法获取数据库中加密的密码,再通过CommonUtils类中方法checkPw比较决定用户是否登陆操作成功;修改MainActivity.java中的doLogin方法如下所示:

private void doLogin() {
    final String sid = txtSid.getText().toString().trim();
    final String spassword = txtSpassword.getText().toString().trim();
    if (TextUtils.isEmpty(sid)) {
        CommonUtils.showShortMsg(this, "请输入用户名");
        txtSid.requestFocus();
    } else if (TextUtils.isEmpty(spassword)) {
        CommonUtils.showShortMsg(this, "请输入密码");
        txtSpassword.requestFocus();
    } else {
        new Thread(new Runnable() {
            @Override //重写run方法
            public void run() {
                final StudentInfo item;
                if (dao.getUserBySid(sid) == null) //检验是否有此用户账号
                    item = null;
                else if (CommonUtils.checkPw(spassword, dao.getUserBySid(sid).getSpassword())) //检验用户输入密码是否与数据库存储的加密密码一致
                    item = dao.getUserBySid(sid);
                else item = null; //不一致的情况
                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (item == null)
                            CommonUtils.showDialogMsg(MainActivity.this, "用户名或密码错误");
                        else
                            CommonUtils.showDialogMsg(MainActivity.this, "登录成功");
                    }
                });
            }
        }).start(); //开启线程
    }
}

完整增删改查案例(自定义适配器、listview等)

1、新建StudentManagerActivity,在阿里巴巴矢量图标库网站下载返回图标return.png添加到res文件夹的drawable中;TIPS:本文最后会粘贴所有源码,以下讲述思路

2、注意修改数据库时出现的中文乱码问题,在DBOpenHelper中修改:

private static final String URL = "jdbc:mysql://10.32.27.173/njtech?characterEncoding=utf8"; //输入IPV4地址以及要查询的数据库

2、新建layout XML File:student_list_item.xml,用于展示listview:

<?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="wrap_content"
    android:layout_margin="5dp"
    android:orientation="vertical">

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

        <TextView
            android:id="@+id/txtSindex"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1."
            android:textColor="#9C27B0"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <TextView
            android:id="@+id/txtSid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="202021136021"
            android:textColor="#9C27B0"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <TextView
            android:id="@+id/txtSname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="XXX"
            android:textColor="#9C27B0"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="right">

            <ImageView
                android:id="@+id/btnEdit"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_marginRight="10dp"
                android:src="@drawable/edit"></ImageView>

            <ImageView
                android:id="@+id/btnDelete"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_marginRight="10dp"
                android:src="@drawable/delete"></ImageView>
        </LinearLayout>

    </LinearLayout>
</LinearLayout>

3、创建接口OnEditBtnClickListener和OnDeleteBtnClickListener :

package com.example.myapplication;

import android.view.View;

/*
 * 修改按钮点击事件监听接口
 */
public interface OnEditBtnClickListener {
    void onEditBtnClick(View view, int position);
}
package com.example.myapplication;
/*删除按钮点击事件*/

import android.view.View;

public interface OnDeleteBtnClickListener {
    void onDeleteBtnClick(View view, int position);
}

4、创建自定义用户适配器类LvStudentInfoAdapter :

package com.example.myapplication;
/*自定义用户适配器类*/

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class LvStudentInfoAdapter extends BaseAdapter {
    private Context context;
    private List<StudentInfo> studentInfoList;
    private OnEditBtnClickListener onEditBtnClickListener;
    private OnDeleteBtnClickListener onDeleteBtnClickListener;

    public LvStudentInfoAdapter() {
    }

    public LvStudentInfoAdapter(Context context, List<StudentInfo> studentInfoList) {
        this.context = context;
        this.studentInfoList = studentInfoList;
    }

    public void setStudentInfoList(List<StudentInfo> studentInfoList) {
        this.studentInfoList = studentInfoList;
    }

    public void setOnEditBtnClickListener(OnEditBtnClickListener onEditBtnClickListener) {
        this.onEditBtnClickListener = onEditBtnClickListener;
    }

    public void setOnDeleteBtnClickListener(OnDeleteBtnClickListener onDeleteBtnClickListener) {
        this.onDeleteBtnClickListener = onDeleteBtnClickListener;
    }

    @Override
    public int getCount() {
        return studentInfoList.size();
    }

    @Override
    public Object getItem(int i) {
        return studentInfoList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
//        return null;
        ViewHolder viewHolder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.student_list_item, null);
            viewHolder = new ViewHolder();
            viewHolder.txtSid = convertView.findViewById(R.id.txtSid);
            viewHolder.txtSindex = convertView.findViewById(R.id.txtSindex);
            viewHolder.txtSname = convertView.findViewById(R.id.txtSname);
            viewHolder.btnEdit = convertView.findViewById(R.id.btnEdit);
            viewHolder.btnDelete = convertView.findViewById(R.id.btnDelete);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        StudentInfo item = studentInfoList.get(i);
        viewHolder.txtSindex.setText(i + 1 + ".");
        viewHolder.txtSid.setText(item.getSid());
        viewHolder.txtSname.setText(item.getSname());
        viewHolder.btnEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onEditBtnClickListener.onEditBtnClick(view, i);
            }
        });
        viewHolder.btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onDeleteBtnClickListener.onDeleteBtnClick(view, i);
            }
        });
        return convertView;
    }

    //自定义内部类
    private class ViewHolder {
        private TextView txtSindex, txtSid, txtSname;
        private ImageView btnEdit, btnDelete;
    }
}

5、创建StudentManagerActivity:

package com.example.myapplication;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;

import java.util.List;

public class StudentManagerActivity extends AppCompatActivity implements View.OnClickListener {
    private ImageView btnReturn, btnAdd;
    private ListView lvStudent;
    private Handler mainHandler;
    private StudentDao studentDao; //用户数据库操作实例
    private List<StudentInfo> studentInfoList;
    private LvStudentInfoAdapter lvStudentInfoAdapter; //用户信息数据适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_manager);
        initView();
        loadStudentList();
    }

    private void initView() {
        studentDao = new StudentDao();
        btnReturn = findViewById(R.id.btnReturn);
        btnAdd = findViewById(R.id.btnAdd);
        lvStudent = findViewById(R.id.lvStudent);
        mainHandler = new Handler(getMainLooper());
        btnReturn.setOnClickListener(this);
        btnAdd.setOnClickListener(this);
    }

    private void loadStudentList() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                studentInfoList = studentDao.getStudentList();
                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        showLvData();
                    }
                });
            }
        }).start();
    }

    private void showLvData() {
        if (lvStudentInfoAdapter == null) {
            lvStudentInfoAdapter = new LvStudentInfoAdapter(this, studentInfoList);
            lvStudent.setAdapter(lvStudentInfoAdapter);
        } else {
            lvStudentInfoAdapter.setStudentInfoList(studentInfoList);
            lvStudentInfoAdapter.notifyDataSetChanged();
        }
        //修改按钮
        lvStudentInfoAdapter.setOnEditBtnClickListener(new OnEditBtnClickListener() {
            @Override
            public void onEditBtnClick(View view, int position) {
                StudentInfo item = studentInfoList.get(position);
                Bundle bundle = new Bundle();
                bundle.putSerializable("item", item);
                Intent intent = new Intent(StudentManagerActivity.this, StudentEditActivity.class);
                intent.putExtras(bundle);
                startActivityForResult(intent, 1);
            }
        });
        //删除按钮
        lvStudentInfoAdapter.setOnDeleteBtnClickListener(new OnDeleteBtnClickListener() {
            @Override
            public void onDeleteBtnClick(View view, int position) {
                final String sid = studentInfoList.get(position).getSid();
                AlertDialog.Builder builder = new AlertDialog.Builder(StudentManagerActivity.this);
                builder.setTitle("提示信息");
                builder.setMessage("您确定要删除学生用户" + studentInfoList.get(position).getSname() + "的信息吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                studentDao.delStudent(sid);
                                mainHandler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        loadStudentList();
                                    }
                                });
                            }
                        }).start();
                    }
                });
                builder.setNegativeButton("取消", null);
                builder.create().show();

            }
        });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnReturn:
                finish(); //结束当前页面
                break;
            case R.id.btnAdd:
                Intent intent = new Intent(this, StudentAddActivity.class);
                startActivityForResult(intent, 1);//requestCode
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == 1) {
            loadStudentList();
        }
    }

}

修改其样式文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"

    android:orientation="vertical"
    tools:context=".StudentManagerActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/btnReturn"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/goback" />

            <ImageView
                android:id="@+id/btnAdd"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentRight="true"
                android:src="@drawable/add" />
        </LinearLayout>

        <ListView
            android:id="@+id/lvStudent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingTop="0dp" />

    </LinearLayout>
</LinearLayout>

6、创建StudentAddActivity:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;

public class StudentAddActivity extends AppCompatActivity {
    private EditText txtSid, txtSpassword, txtSname, txtSgender, txtSlocation, txtSphone, txtSemail, txtCid;
    private Handler mainHandler;
    private StudentDao studentDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_add);
        initView();
    }

    private void initView() {
        txtSid = findViewById(R.id.txtSid);
        txtSpassword = findViewById(R.id.txtSpassword);
        txtSname = findViewById(R.id.txtSname);
        txtSgender = findViewById(R.id.txtSgender);
        txtSlocation = findViewById(R.id.txtSlocation);
        txtSphone = findViewById(R.id.txtSphone);
        txtSemail = findViewById(R.id.txtSemail);
        txtCid = findViewById(R.id.txtCid);
        mainHandler = new Handler(getMainLooper());
        studentDao = new StudentDao();
    }

    public void btnAddClick(View view) {
        final String sid = txtSid.getText().toString().trim();
        final String spassword = txtSpassword.getText().toString().trim();
        final String sname = txtSname.getText().toString().trim();
        final String sgender = txtSgender.getText().toString().trim();
        final String slocaltion = txtSlocation.getText().toString().trim();
        final String sphone = txtSphone.getText().toString().trim();
        final String semail = txtSemail.getText().toString().trim();
        final String cid = txtCid.getText().toString().trim();

        if (TextUtils.isEmpty(sid) || TextUtils.isEmpty(spassword) || TextUtils.isEmpty(sname) || TextUtils.isEmpty(sgender) || TextUtils.isEmpty(slocaltion) || TextUtils.isEmpty(sphone) || TextUtils.isEmpty(semail) || TextUtils.isEmpty(cid)) {
            CommonUtils.showShortMsg(this, "请输入完整信息");
//            txtSid.requestFocus();
        } else {
            new Thread(new Runnable() {
                @Override //重写run方法
                public void run() {
                    final StudentInfo item;
                    if (studentDao.getStudentBySid(sid) != null) //检验是否有此用户账号
                        item = null;
                    else {
                        item = new StudentInfo();
                        item.setSid(sid);
                        item.setSpassword(spassword);
                        item.setSname(sname);
                        item.setSgender(sgender);
                        item.setSlocation(slocaltion);
                        item.setSphone(sphone);
                        item.setSemail(semail);
                        item.setCid(cid);
                        studentDao.addStudent(item);
                    }
                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            if (item == null)
                                CommonUtils.showShortMsg(StudentAddActivity.this, "学号已存在");
                            else {
                                CommonUtils.showShortMsg(StudentAddActivity.this, "添加成功");
//                                CommonUtils.showDialogMsg(MainActivity.this, "登录成功");
                                setResult(1); //resultCode
                                finish();
//                                Intent intent = new Intent(StudentAddActivity.this, StudentManagerActivity.class);
//                                startActivity(intent);
                            }
                        }
                    });
                }
            }).start(); //开启线程
        }
    }
}

修改其样式文件:

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

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学 号:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入学号"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密 码:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSpassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓 名:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入姓名"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性 别:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSgender"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入性别"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="地 址:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSlocation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入地址"
            android:inputType="textPostalAddress"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="手 机:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSphone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入手机号"
            android:inputType="phone"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="邮 箱:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSemail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入邮箱"
            android:inputType="textEmailAddress"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="班级id:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtCid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入班级id"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnAddClick"
        android:text="确 定"
        android:textColor="#0f0"
        android:textSize="18sp"
        android:textStyle="bold"></Button>
</LinearLayout>

7、创建StudentEditActivity:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;

public class StudentEditActivity extends AppCompatActivity {
    private EditText txtSid, txtSpassword, txtSname, txtSgender, txtSlocation, txtSphone, txtSemail, txtCid;
    private Handler mainHandler;
    private StudentDao studentDao;
    private StudentInfo item;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_edit);
        initView();
    }

    private void initView() {
        Bundle bundle = getIntent().getExtras();
        txtSid = findViewById(R.id.txtSid);
        txtSpassword = findViewById(R.id.txtSpassword);
        txtSname = findViewById(R.id.txtSname);
        txtSgender = findViewById(R.id.txtSgender);
        txtSlocation = findViewById(R.id.txtSlocation);
        txtSphone = findViewById(R.id.txtSphone);
        txtSemail = findViewById(R.id.txtSemail);
        txtCid = findViewById(R.id.txtCid);
        if (bundle != null) {
            item = (StudentInfo) bundle.getSerializable("item");
            txtSid.setText(item.getSid());
//            txtSpassword.setText(item.getSpassword());
            txtSname.setText(item.getSname());
            txtSgender.setText(item.getSgender());
            txtSlocation.setText(item.getSlocation());
            txtSphone.setText(item.getSphone());
            txtSemail.setText(item.getSemail());
            txtCid.setText(item.getCid());
        }
        mainHandler = new Handler(getMainLooper());
        studentDao = new StudentDao();
    }

    public void btnEditClick(View view) {
        final String sid = txtSid.getText().toString().trim();
        final String spassword = txtSpassword.getText().toString().trim();
        final String sname = txtSname.getText().toString().trim();
        final String sgender = txtSgender.getText().toString().trim();
        final String slocaltion = txtSlocation.getText().toString().trim();
        final String sphone = txtSphone.getText().toString().trim();
        final String semail = txtSemail.getText().toString().trim();
        final String cid = txtCid.getText().toString().trim();

        if (TextUtils.isEmpty(sid) || TextUtils.isEmpty(spassword) || TextUtils.isEmpty(sname) || TextUtils.isEmpty(sgender) || TextUtils.isEmpty(slocaltion) || TextUtils.isEmpty(sphone) || TextUtils.isEmpty(semail) || TextUtils.isEmpty(cid)) {
            CommonUtils.showShortMsg(this, "请输入完整信息");
//            txtSid.requestFocus();
        } else {
            new Thread(new Runnable() {
                @Override //重写run方法
                public void run() {
                    item = new StudentInfo();
                    item.setSid(sid);
                    item.setSpassword(CommonUtils.getBcryptHash(spassword));
                    item.setSname(sname);
                    item.setSgender(sgender);
                    item.setSlocation(slocaltion);
                    item.setSphone(sphone);
                    item.setSemail(semail);
                    item.setCid(cid);
                    studentDao.editStudent(item);

                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            CommonUtils.showShortMsg(StudentEditActivity.this, "修改成功");
//                                CommonUtils.showDialogMsg(MainActivity.this, "登录成功");
                            setResult(1); //resultCode
                            finish();
//                                Intent intent = new Intent(StudentAddActivity.this, StudentManagerActivity.class);
//                                startActivity(intent);
                        }
                    });
                }
            }).start(); //开启线程
        }
    }
}

修改其样式文件:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学 号:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入学号"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密 码:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSpassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓 名:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入姓名"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性 别:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSgender"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入性别"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="地 址:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSlocation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入地址"
            android:inputType="textPostalAddress"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="手 机:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSphone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入手机号"
            android:inputType="phone"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="邮 箱:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtSemail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入邮箱"
            android:inputType="textEmailAddress"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="班级id:"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></TextView>

        <EditText
            android:id="@+id/txtCid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入班级id"
            android:inputType="textPersonName"
            android:textColor="#00f"
            android:textSize="16sp"
            android:textStyle="bold"></EditText>
    </LinearLayout>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnEditClick"
        android:text="确 定"
        android:textColor="#0f0"
        android:textSize="18sp"
        android:textStyle="bold"></Button>
</LinearLayout>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一份名片管理系统的基础代码,但是由于涉及到登录注册模块,建议您在代码中加入密码加密验证机制,以确保数据的安全性。 以下是名片管理系统的基础代码: ```python import tkinter as tk # 创建窗口 window = tk.Tk() window.title("名片管理系统") window.geometry("500x500") # 创建标签 label_title = tk.Label(window, text="名片管理系统", font=("Arial", 20)) label_title.pack() # 创建框架 frame_add = tk.Frame(window) frame_add.pack(pady=10) frame_delete = tk.Frame(window) frame_delete.pack(pady=10) frame_modify = tk.Frame(window) frame_modify.pack(pady=10) frame_search = tk.Frame(window) frame_search.pack(pady=10) # 定义函数 def add_card(): # 添加名片 pass def delete_card(): # 删除名片 pass def modify_card(): # 修改名片 pass def search_card(): # 查询名片 pass # 创建按钮 button_add = tk.Button(frame_add, text="添加名片", command=add_card) button_add.pack(side=tk.LEFT) button_delete = tk.Button(frame_delete, text="删除名片", command=delete_card) button_delete.pack(side=tk.LEFT) button_modify = tk.Button(frame_modify, text="修改名片", command=modify_card) button_modify.pack(side=tk.LEFT) button_search = tk.Button(frame_search, text="查询名片", command=search_card) button_search.pack(side=tk.LEFT) # 运行窗口 window.mainloop() ``` 您可以在函数中添加具体的代码实现增删改查功能,比如添加名片可以通过弹出对话框让用户输入名字、电话等信息,并将信息保存到文件中。 如果您需要实现登录注册功能,可以考虑使用第三方库,比如bcrypt或者hashlib,对密码进行加密验证。在用户注册时,将密码进行加密后保存到文件中,登录时再进行验证即可。这里仅提供基础框架,具体实现还需要您自己完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值