登陆、注册、数据库用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.页面



浙公网安备 33010602011771号