zoukankan      html  css  js  c++  java
  • 家庭记账本安卓版开发:第二天

    一、结果测试

    此时第一次运行,数据库进行创建,数据为空

     

     

    我们去注册账号

     输入用户名

    输入密码

     

     注册成功,自动返回登录页

     查看数据库

     再次返回注册页,注册名字为zzw,提示用户名已存在

     我们返回登录页去登陆

     登陆成功

     二、问题总结

    1、在Activity调用onCreate方法时,应该调用public void onCreate(@Nullable Bundle savedInstanceState)方法,而不是public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState)方法。

    2、在数据库为空时,进行增删改查,如果调用数据库事务就会报错。

    3、当使用startActivityForResult(intent,mRegisterCode);进行跳转时,在第二个界面的跳转回第一个页面的时候,必须要加上finish(),因为这个方法的定义是,当在第二个界面的操作完成后,自动跳回第一个界面,而finish()就起着判断在第二个Activity的操作是否完成的重要作用,只要不finish,那就不会跳转回来。

    三、原码

     AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.familybook">
    
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="家庭记账本"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".LoginActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".IndexActivity"/>
            <activity android:name=".RegisterActivity"/>
        </application>
    
    </manifest>

    LoginActivity.java

    package com.example.familybook;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.PersistableBundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    import com.example.familybook.dao.IUserDao;
    import com.example.familybook.dao.UserDaoImpl;
    import com.example.familybook.database.UserDatabaseHelper;
    
    public class LoginActivity  extends AppCompatActivity {
    
        private EditText mUsername;
        private EditText mPassword;
        private Button mLogin;
        private Button mGotoregister;
        private  static final int mRegisterCode=1;
        private IUserDao mIUserDao;
    
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            //创建数据库
            UserDatabaseHelper helper =new UserDatabaseHelper(LoginActivity.this);
            helper.getWritableDatabase();
    
            //初始化控件
            initView();
            //设置事件监听
            initListener();
        }
    
        private void initListener() {
            mLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    login();
                }
            });
            mGotoregister.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    register();
                }
            });
        }
    
        private void register() {
            Intent intent =new Intent(this, RegisterActivity.class);
            startActivityForResult(intent,mRegisterCode);
        }
    
        private void login() {
            //账号
            String usernameText =mUsername.getText().toString();
            //密码
            String passwordText =mPassword.getText().toString();
    
            //对账号和密码进行检测
            if(TextUtils.isEmpty(usernameText)){
                //账号为空
                Toast.makeText(this,"用户名不可以为空",Toast.LENGTH_SHORT).show();
                return;
            }else if(TextUtils.isEmpty(passwordText)){
                //密码为空
                Toast.makeText(this,"密码不可以为空",Toast.LENGTH_SHORT).show();
            }else {
                boolean result = mIUserDao.Login(usernameText, passwordText);
                if (result) {
    
                    Intent intent = new Intent(this, IndexActivity.class);
                    startActivity(intent);
                } else {
                    //登录失败
                    Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        private void initView() {
            mUsername=(EditText)this.findViewById(R.id.username);
            mPassword=(EditText)this.findViewById(R.id.password);
            mLogin=(Button) this.findViewById(R.id.login_btn);
            mGotoregister=(Button)this.findViewById(R.id.goto_register_btn);
            mIUserDao=new UserDaoImpl(this);
        }
        /**
         * 返回的结果在这里回调
         * @param requestCode
         * @param resultCode
         * @param data
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            String resultContent = null;
            //当我们判断这个请求码的时候,就知道,这是注册界面返回的结果
            if (requestCode==mRegisterCode) {
                if(resultCode==2){
                    //注册成功
                    Toast.makeText(this,"注册成功",Toast.LENGTH_SHORT).show();
                }
            }
        }
    
    }

    RegisterActivity.java

    package com.example.familybook;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    
    import androidx.annotation.Nullable;
    
    import com.example.familybook.dao.IUserDao;
    import com.example.familybook.dao.UserDaoImpl;
    import com.example.familybook.entity.User;
    public class RegisterActivity extends Activity{
    
    
            private RadioGroup mSex;
            private EditText mUsername;
            private EditText mPassword;
            private Button mRegisterBtn;
            private RadioButton mR;
            private IUserDao mIUserDao;
            private String TAG="RegisterActivity";
    
        @Override
            public void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_register);
                //初始化控件
                initView();
                //设置监听,处理点击事件
                initListener();
            }
    
            private void initListener() {
                mSex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                        mR =(RadioButton) findViewById(checkedId);
                    }
                });
                mRegisterBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //点击了注册按钮
                        Registerhandler();
                    }
                });
            }
    
            private void Registerhandler() {
                User user =null;
                //账号
                String usernameText =mUsername.getText().toString().trim();
                //密码
                String passwordText =mPassword.getText().toString().trim();
                //性别
                String sexText;
                if(mR.getText().toString()!=null) {
                     sexText = mR.getText().toString();
                }else{
                    sexText="男";
                }
                Log.e(TAG,"账户:"+usernameText);
                Log.e(TAG,"密码:"+passwordText);
                Log.e(TAG,"性别:"+sexText);
                //对账号和密码进行检测
                if(TextUtils.isEmpty(usernameText)){
                    //账号为空
                    Toast.makeText(this,"用户名不可以为空",Toast.LENGTH_SHORT).show();
                    return;
                }else if(TextUtils.isEmpty(passwordText)){
                    //密码为空
                    Toast.makeText(this,"密码不可以为空",Toast.LENGTH_SHORT).show();
                }else {
                    boolean result = mIUserDao.isExist(usernameText);
                    if (result) {
                        //用户名已被使用
                        Toast.makeText(this, "此用户名已被注册", Toast.LENGTH_SHORT).show();
                    } else {
                        user = new User(usernameText, passwordText, sexText);
                        int rs = (int) mIUserDao.Register(user);
                        Log.e(TAG,"rs:"+rs);
                        if (rs > -1) {
                            //注册成功,跳回登录页面
                            Intent intent = new Intent();
                            setResult(2, intent);
                            finish();
                        }
                    }
                }
            }
    
            private void initView() {
                mUsername = (EditText)this.findViewById(R.id.r_username);
                mPassword = (EditText)this.findViewById(R.id.r_password);
                mSex = (RadioGroup)this.findViewById(R.id.radioGroup);
                mRegisterBtn =(Button)this.findViewById(R.id.register_btn);
                mIUserDao =new UserDaoImpl(this);
                mR=(RadioButton)this.findViewById(R.id.man_radio);
            }
    
    
    
    }

    IndexActivity.java

    package com.example.familybook;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import androidx.annotation.Nullable;
    
    public class IndexActivity extends Activity {
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_index);
        }
    }

    database

    UserDatabaseHelper.java

    package com.example.familybook.database;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    
    import androidx.annotation.Nullable;
    
    import com.example.familybook.utils.Constants;
    
    
    public class UserDatabaseHelper extends SQLiteOpenHelper {
        private static final String TAG = "UserDatabaseHelper";
    
        public UserDatabaseHelper(@Nullable Context context) {
            super(context, Constants.USER_DB_NAME,null,Constants.USER_DB_VERSION);
        }
    
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            /**
             * 创建数据库
             */
            Log.e(TAG,"数据库创建.....");
            String createsql=" create table  " +Constants.USER_TABLE_NAME +"("+Constants.USER_TABLE_FIELD_ID + " integer primary key autoincrement," +Constants.USER_TABLE_FIELD_UNAME +" varchar(30)," +Constants.USER_TABLE_FIELD_UPWD+ " varchar(32)," +Constants.USER_TABLE_FIELD_SEX +" varchar(5)  )";
            db.execSQL(createsql);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
            /**
             * 数据库更新
             */
        }
    }

     entity

    User.java

    package com.example.familybook.entity;
    
    /**
     * 用户账号实体类
     */
    public class User {
        private int _id;
        private String username;
        private String password;
        private String sex;
    
        public User( ) {
    
        }
    
        public User( String username, String password, String sex) {
            this.username = username;
            this.password = password;
            this.sex = sex;
        }
    
    
        public User(int id, String username, String password, String sex) {
            _id = id;
            this.username = username;
            this.password = password;
            this.sex = sex;
        }
    
    
        public int get_id() {
            return _id;
        }
    
        public void set_id(int _id) {
            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 String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "_id=" + _id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", sex='" + sex + '\'' +
                    '}';
        }
    }

    utils

    Constants.java

    package com.example.familybook.utils;
    /**
     * 常量类
     */
    public class Constants {
    
        public static final String USER_DB_NAME="user.db";
        public static final int USER_DB_VERSION=1;
        public static final String USER_TABLE_NAME="user";
        public static final String USER_TABLE_FIELD_ID="_id";
        public static final String USER_TABLE_FIELD_UNAME="username";
        public static final String USER_TABLE_FIELD_UPWD="password";
        public static final String USER_TABLE_FIELD_SEX="sex";
    
    }

    dao

    IUserDao.java

    package com.example.familybook.dao;
    
    import com.example.familybook.entity.User;
    
    /**
     * 这是User数据库接口层
     */
    public interface IUserDao {
        boolean isExist(String username);
        boolean Login(String username,String password);
        long Register(User user);
        User  Query(String username,String password);
        User Query(String username);
    }

    UserDaoImpl.java

    package com.example.familybook.dao;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.familybook.database.UserDatabaseHelper;
    import com.example.familybook.entity.User;
    import com.example.familybook.utils.Constants;
    
    public class UserDaoImpl implements IUserDao {
        private  final UserDatabaseHelper mUserDatabaseHelper;
    
        public UserDaoImpl(Context context){
            mUserDatabaseHelper=new UserDatabaseHelper(context);
        }
    
    
    
        @Override
        public boolean isExist(String username) {
    
            return Query(username)==null? false:true;
        }
    
        /**
         * 该方法用于登录
         * @param username
         * @param password
         * @return
         */
        @Override
        public boolean Login(String username,String password) {
            return Query(username,password)==null? false:true;
        }
    
        /**
         * 该方法用于注册账户
         * @param user
         * @return
         */
        @Override
        public long Register(User user) {
            SQLiteDatabase db =mUserDatabaseHelper.getWritableDatabase();
            long result =-1;
    //        db.beginTransaction();
            try {
                ContentValues values  =new ContentValues();
                values.put(Constants.USER_TABLE_FIELD_UNAME,user.getUsername());
                values.put(Constants.USER_TABLE_FIELD_UPWD,user.getPassword());
                values.put(Constants.USER_TABLE_FIELD_SEX,user.getSex());
                result=db.insert(Constants.USER_TABLE_NAME,null,values);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                db.close();
    //            db.endTransaction();
            }
    
            return result;
        }
    
        /**
         * 该方法是通过检查用户名和密码查询用户
         * @param username
         * @param password
         * @return
         */
        @Override
        public User Query(String username, String password) {
            User user= null;
            SQLiteDatabase db =mUserDatabaseHelper.getWritableDatabase();
    
                /**
                 * 如果数据库不为空,进行查询
                 */
    
    //            db.beginTransaction();
                try {
    
                    String sql = "select * from " + Constants.USER_TABLE_NAME + " where " + Constants.USER_TABLE_FIELD_UNAME + "=? and " + Constants.USER_TABLE_FIELD_UPWD + "=?";
                    String[] str = new String[]{username, password};
                    Cursor cursor = db.rawQuery(sql, str);
                    /**
                     * 下面在库中进行具体查询,并将
                     */
                    if (cursor.moveToNext()) {
                        /**
                         * 将查到的数据逐一封装到user对象中
                         */
    
                        user = new User();
                        //set id
                        int userID = cursor.getInt(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_ID));
                        user.set_id(userID);
                        //set username
                        String uname = cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_UNAME));
                        user.setUsername(uname);
                        //set password
                        String upwd = cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_UPWD));
                        user.setPassword(upwd);
                        //set sex
                        String usex = cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_SEX));
                        user.setSex(usex);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    db.close();
    //                db.endTransaction();
                }
    
            return user;
        }
    
        /**
         * 该方法是通过检查用户名来查找用户
         * @param username
         * @return
         */
        @Override
        public User Query(String username) {
            User user= null;
            SQLiteDatabase db =mUserDatabaseHelper.getWritableDatabase();
    //        db.beginTransaction();
            try {
    
                String sql ="select * from "+Constants.USER_TABLE_NAME+" where "+Constants.USER_TABLE_FIELD_UNAME+"=? ";
                String[] str  =new  String[]{username};
                Cursor cursor =db.rawQuery(sql,str);
                /**
                 * 下面在库中进行具体查询,并将
                 */
                if(cursor.moveToNext()){
                    /**
                     * 将查到的数据逐一封装到user对象中
                     */
    
                    user  =new User();
                    //set id
                    int userID = cursor.getInt(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_ID));
                    user.set_id(userID);
                    //set username
                    String uname=cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_UNAME));
                    user.setUsername(uname);
                    //set password
                    String upwd=cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_UPWD));
                    user.setPassword(upwd);
                    //set sex
                    String usex=cursor.getString(cursor.getColumnIndex(Constants.USER_TABLE_FIELD_SEX));
                    user.setSex(usex);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                db.close();
    //            db.endTransaction();
            }
    
            return user;
        }
    }

    layout

    activity_login.xml

    <?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:background="@mipmap/login">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:padding="30dp"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_marginLeft="30dp"
                android:drawableLeft="@mipmap/ic_launcher_round"
                android:text="家庭记账本"
                android:textSize="40sp"
                android:layout_height="wrap_content"/>
    
            <EditText
                android:id="@+id/username"
                android:layout_width="match_parent"
                android:layout_marginTop="30dp"
                android:maxLines="1"
                android:layout_height="wrap_content"
                android:hint="用户名" />
            <EditText
                android:id="@+id/password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:maxLines="1"
                android:hint="密码" />
            <Button
                android:id="@+id/login_btn"
                android:layout_width="match_parent"
                android:text="登录"
                android:textSize="20sp"
                android:layout_height="wrap_content"/>
    
            <Button
                android:id="@+id/goto_register_btn"
                android:background="@android:color/transparent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_gravity="center"
                android:text="没有账号,立即去注册"
                android:textColor="#00ffff"
                android:textSize="16sp" />
    
    
    
        </LinearLayout>
    
    
    
    </LinearLayout>

    activity_register.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:background="@mipmap/register"
        android:padding="30dp"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:text="欢迎注册家庭记账本"
            android:textSize="30sp"
            android:layout_marginTop="30dp"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
        <EditText
            android:id="@+id/r_username"
            android:layout_width="match_parent"
            android:layout_marginTop="30dp"
            android:hint="请输入用户名"
            android:layout_height="wrap_content"/>
        <EditText
            android:id="@+id/r_password"
            android:layout_width="match_parent"
            android:layout_marginTop="30dp"
            android:inputType="text"
            android:hint="请输入密码"
            android:layout_height="wrap_content"/>
        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <RadioButton
                android:id="@+id/man_radio"
                android:layout_width="wrap_content"
                android:text="男"
                android:checked="true"
                android:layout_height="wrap_content">
    
            </RadioButton>
            <RadioButton
                android:id="@+id/woman_group"
                android:layout_width="wrap_content"
                android:text="女"
                android:layout_height="wrap_content">
    
            </RadioButton>
        </RadioGroup>
        <Button
            android:id="@+id/register_btn"
            android:layout_width="wrap_content"
            android:text="注册"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    activity_index.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:text="首页"
            android:textSize="50sp"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
        <TextView
            android:layout_width="wrap_content"
            android:text="登录成功"
            android:layout_marginTop="200dp"
            android:layout_gravity="center"
            android:textSize="40sp"
            android:layout_height="wrap_content"/>
    </LinearLayout>
  • 相关阅读:
    Git centos 6.5 搭建(gitosis)
    error at ::0 can't find referenced pointcut xxx
    MySql 主从配置
    svn 搭建
    Flatbuffers学习
    python3 获取函数变量
    pyqt5 重启相同线程错误:QThread: Destroyed while thread is still running
    WIN10 使用注册表设置单应用KIOSK模式(不限win10版本)
    WIN10 使用POWERSHELL 设置单应用KIOSK模式(win10家庭版或企业版)
    py文件加密打包成exe文件
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12292048.html
Copyright © 2011-2022 走看看