登陆、注册、数据库用sqlite

参考:Android简单登录系统 - 水击三千 - 博客园 (cnblogs.com)

1.目录结构

 

 

2.数据库DBHelper类

我们需要编写一个数据库辅助类来访问sqlite数据库。在数据库辅助类中,可以完成数据库的创建,表的增加、删除、修改、查询等操作。

package com.example.newwords;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
    public static final String TB_NAME = "user";//表名
    public static final String ID = "id";//id
    public static final String NAME = "userid";//用户名
    public static final String UerPwd = "userpwd";//密码
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                    int version) {
        super(context, name, factory, version);
        this.getWritableDatabase();
        // TODO Auto-generated constructor stub
    }

    @Override
    //建立表
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
        arg0.execSQL("CREATE TABLE IF NOT EXISTS "
                + TB_NAME + " ("
                + ID + " INTEGER PRIMARY KEY,"
                + NAME + " VARCHAR,"
                + UerPwd + " VARCHAR)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }
    //关闭数据库
    public void close()
    {
        this.getWritableDatabase().close();
    }
    //添加新用户
    public boolean AddUser(String userid,String userpwd)
    {
        try
        {
            ContentValues cv = new ContentValues();
            cv.put(this.NAME, userid);//添加用户名
            cv.put(this.UerPwd,userpwd);//添加密码
            this.getWritableDatabase().insert(this.TB_NAME,null,cv);
            return true;
        }
        catch(Exception ex)
        {
            return false;
        }
    }
}

3..登录页面

这个登录系统比较简单,我们只是简单的验证用户名和密码。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:paddingBottom="5dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="5dp"
    tools:context=".MainActivity" >

<!--    activity_mian.xml-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:orientation="vertical" >

        <!--用户名-->
        <LinearLayout
            android:id="@+id/lluser"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_user"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="用户名"
                android:textSize="18sp" />

            <EditText
                android:id="@+id/ed_user"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:layout_marginLeft="10dp"
                android:inputType="text"
                android:textSize="18sp"
                android:textStyle="normal"
                android:typeface="normal" >
                <!--光标定位到此-->
                <requestFocus />
            </EditText>
        </LinearLayout>


        <!--密码-->
        <LinearLayout
            android:id="@+id/llpwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_pwd"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="密码"
                android:textSize="18sp" />

            <EditText
                android:id="@+id/ed_pwd"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:layout_marginLeft="10dp"
                android:inputType="textPassword"
                android:textSize="18sp"
                android:textStyle="normal" />

        </LinearLayout>

        <!--两个按钮:登录、注册-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnlogin"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="登录" />

            <Button
                android:id="@+id/btnreg"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_marginLeft="30dp"
                android:text="注册" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

这个登录界面没有任何的修饰,而且我最近喜欢用RelativeLayout和LinearLayout搭配使用。RelativeLayout是相对布局,LinearLayout是绝对布局。登录页面只有两个输入框和两个按钮,一个用于提交,另一个用于注册。

package com.example.newwords;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {


    EditText ed_id;//用户名
    EditText ed_pwd;//密码
    DBHelper database;//数据库
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ed_id=(EditText)findViewById(R.id.ed_user);//获取绑定用户名
        ed_pwd=(EditText)findViewById(R.id.ed_pwd);//获取绑定密码
        Button btnlogin=(Button)findViewById(R.id.btnlogin);//获取绑定登录按钮
        database = new DBHelper(MainActivity.this,"LoginInfo",null,1);//这段代码放到Activity类中才用this
        btnlogin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                getUser();
            }
        });
        //获取注册按钮
        Button btnreg=(Button)findViewById(R.id.btnreg);
        btnreg.setOnClickListener(new View.OnClickListener() {
            //点击注册按钮的时候跳转到注册页面
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(MainActivity.this, UserRegister.class);
                startActivity(intent);
            }
        });
    }
    @SuppressLint("Range")
    public void getUser()
    {
        String sql="select * from user where userid=?";//查询用户名
        Cursor cursor = database.getWritableDatabase().rawQuery(sql, new String[]{ed_id.getText().toString()});
        if(cursor.moveToFirst())
        {
            //验证密码
            if(ed_pwd.getText().toString().equals(cursor.getString(cursor.getColumnIndex("userpwd"))))
            {
                Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(this, "用户名或者密码错误", Toast.LENGTH_SHORT).show();
            }
        }
        database.close();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

在后台,我们主要做的就是对用户名和密码的验证。通过前面定义的辅助类来实现。

4..注册页面

注册用户,提供新用户的注册。只要用户名和密码,以及对密码的确认。activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

<!--    用户名-->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/lluserreg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_userreg"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="用户名"
                android:textSize="18sp" />

            <EditText
                android:id="@+id/ed_userreg"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:layout_marginLeft="60dp"
                android:inputType="text"
                android:textSize="18sp"
                android:textStyle="normal"
                android:typeface="normal" >
                <requestFocus />
            </EditText>
        </LinearLayout>

<!--        密码-->
        <LinearLayout
            android:id="@+id/llpwdreg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_pwdreg"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="密码"
                android:textSize="18sp" />

            <EditText
                android:id="@+id/ed_pwdreg"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:layout_marginLeft="60dp"
                android:inputType="textPassword"
                android:textSize="18sp"
                android:textStyle="normal" />

        </LinearLayout>

<!--        确认密码-->
        <LinearLayout
            android:id="@+id/llpwdreg2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_pwdreg2"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="确认密码"
                android:textSize="18sp" />

            <EditText
                android:id="@+id/ed_pwdreg2"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:layout_marginLeft="22dp"
                android:inputType="textPassword"
                android:textSize="18sp"
                android:textStyle="normal" />

        </LinearLayout>

<!--     按钮:提交、取消-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnsub"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="提交" />
            <Button
                android:id="@+id/btncancel"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_marginLeft="30dp"
                android:text="取消" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

界面包括:用户名、密码、确认密码、提交和取消。UserRegister

package com.example.newwords;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class UserRegister extends Activity {

    EditText edtext;
    EditText edpwd;
    EditText edpwd2;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        Button btnsub=(Button)findViewById(R.id.btnsub);//提交
        edtext=(EditText)findViewById(R.id.ed_userreg);//用户名
        edpwd=(EditText)findViewById(R.id.ed_pwdreg);//密码
        edpwd2=(EditText)findViewById(R.id.ed_pwdreg2);//确认密码
        btnsub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                setUser();
            }
        });
        //取消
        Button btncancel=(Button)findViewById(R.id.btncancel);
        btncancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });

    }
    private void setUser()
    {
        DBHelper database=new DBHelper(UserRegister.this,"LoginInfo",null,1);

        //判断用户名密码是否都输入
        if(edtext.getText().toString().length()<=0||edpwd.getText().toString().length()<=0||edpwd2.getText().toString().length()<=0)
        {
            Toast.makeText(this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        //查询用户名是否已存在
        if(edtext.getText().toString().length()>0)
        {
            String sql="select * from user where userid=?";
            Cursor cursor=database.getWritableDatabase().rawQuery(sql, new String[]{edtext.getText().toString()});
            if(cursor.moveToFirst())
            {
                Toast.makeText(this, "用户名已经存在", Toast.LENGTH_SHORT).show();
                return;
            }
        }
        //判断两次输入密码是否一致
        if(!edpwd.getText().toString().equals(edpwd2.getText().toString()))
        {
            Toast.makeText(this, "两次输入的密码不同", Toast.LENGTH_SHORT).show();
            return;
        }
        //满足以上条件,给数据库插入数据:用户名、密码,插入成功,弹出提示,并返回登陆页面
        if(database.AddUser(edtext.getText().toString(), edpwd.getText().toString()))
        {
            //弹出提示
            Toast.makeText(this, "用户注册成功", Toast.LENGTH_SHORT).show();
            //跳转回登录页面
            Intent intent=new Intent();
            intent.setClass(this, MainActivity.class);
            startActivity(intent);
        }
        else
        {
            Toast.makeText(this, "用户注册失败", Toast.LENGTH_SHORT).show();
        }
        database.close();//关闭数据库
    }
}

后台代码主要完成用户的添加。为了确保用户的唯一性,需要对用户的账号进行验证,看表中是否已经存在相同的账号。同时,还需要确保两次输入密码的一致性。

4.AndroidMainfest.xml插入页面

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.NewWords"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
        <activity android:name=".UserRegister" />
    </application>
</manifest>

5.页面

posted @ 2022-12-29 18:05  驼七  阅读(407)  评论(0)    收藏  举报