您的位置:首页 > 移动开发 > Android开发

Android 实现登录注册功能

2015-12-27 00:31 726 查看
初次使用SQliteOpenHelper,SQliteDatabase实现登录注册功能。写下这篇博客谨记。先上图片看看效果。







首先创建布局文件activity_main.xml文件。布局很简单只有一个LinearLayout,一个TableLayout,两个TextView,两个EditText,两个Button。之所以在TableLayout之前嵌套一个LinearLayout,是希望把背景图定死。不然输入框获取焦点,软键盘弹出时背景图会被拉伸。关于软键盘弹出的遮挡组件影响美观的事情我还上网搜了有关资料。

Android彻底解决软键盘弹出遮挡组件

但是,我并没有按照这篇博文的方式重写LinearLayout。我的方法是直接设置marginTop=200dp。

以下是activity_main.xml源码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TableLayout

android:layout_width="match_parent"
android:layout_marginTop="200dp"
android:layout_height="match_parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/username"
android:textSize="20dp"
android:layout_marginLeft="30dp"
android:textColor="#F5F5F5"
android:id="@+id/textView" />

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:background="@drawable/edit_selector"
android:cursorVisible="false"
android:singleLine="true"
android:gravity="center"
android:layout_marginRight="30dp"
android:id="@+id/editText" />

</TableRow>
<TableRow android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:layout_marginLeft="30dp"
android:textColor="#F5F5F5"
android:text="@string/password"
android:id="@+id/textView2" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:background="@drawable/edit_selector"
android:ems="10"
android:gravity="center"
android:singleLine="true"
android:cursorVisible="false"
android:layout_marginRight="30dp"
android:id="@+id/editText3" />

</TableRow>
<TableRow android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
android:textSize="20dp"
android:background="@drawable/button_selector"
android:layout_marginLeft="30dp"
android:id="@+id/button" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"
android:textSize="20dp"
android:layout_marginLeft="10dp"
android:background="@drawable/button_selector"
android:layout_marginRight="30dp"
android:id="@+id/button2" />
</TableRow>

</TableLayout>
</LinearLayout>


写好了activity_main.xml之后呢,我还在drawable文件夹下定义了一个edit_selector和一个button_selector.xml。是为了设置输入框获取焦点是的状态改变和button点击前后的状态改变。特别提醒android的空格是#&160; 不是 ;。

XML文件定义好之后,我们就获取组件并为其设置监听器。

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
userName=(EditText)findViewById(R.id.editText);
password=(EditText)findViewById(R.id.editText3);
loadButton = (Button) findViewById(R.id.button);
registerButton = (Button) findViewById(R.id.button2);
loadButton.setTag(1);
loadButton.setOnClickListener(this);
registerButton.setTag(2);
registerButton.setOnClickListener(this);

}

@Override
public void onClick(View v) {
int tag = (int) v.getTag();
switch (tag) {
case 1:
Intent intent1=new Intent(MainActivity.this,firstPage.class);
intent1.putExtra("userName",userName.getText().toString());
intent1.putExtra("password",password.getText().toString());
if (idCorrect()){
intent1.putExtra("userName",userName.getText().toString());
intent1.putExtra("password",password.getText().toString());
startActivity(intent1);
}
break;

case 2:
Intent intent=new Intent(this,registerActivity.class);
startActivity(intent);
break;
}

}


这是登录界面的代码。当用户输入账号密码时,先进行判断该用户是否注册,即查询数据库。如果正确就跳转到另一个activity。

public boolean idCorrect(){
myOpenHelper=new MyOpenHelper(this,"mydb.db",null,1);
database=myOpenHelper.getWritableDatabase();
Cursor cursor=database.rawQuery(qurySql,null);
while(cursor.moveToNext()){
userName1=cursor.getString(cursor.getColumnIndex("userId"));
password1=cursor.getString(cursor.getColumnIndex("password"));
if (userName1.equals(userName.getText().toString())&&password1.equals(password.getText().toString())){
return true;
}
}
Toast.makeText(this,"账号或密码错误,请重新输入",Toast.LENGTH_LONG).show();
return false;

}


这是查询数据库并判断该用户是否已注册。

//打开或创建一个名为mydb.db的数据库。如果没有就创建一个
myOpenHelper=new MyOpenHelper(this,"mydb.db",null,1);
//在getWritableDatabase()之前数据库其实并没有实际创建。
//所以真正意义上来说这句才是创建数据库。获取一个可读写的数据库
database=myOpenHelper.getWritableDatabase();
//查询语句
Cursor cursor=database.rawQuery(qurySql,null);


MyOpenHelper是一个继承了SQLiteOpenHelper的子类。第一个参数是context,第二个参数是String DatabaseName,要打开或创建的数据库名称,第三个参数是CursorFactory factory,用来创建cursor对象,默认为null。第四个参数为int version,数据库版本。

接下来我们看下注册界面的activity。

package com.example.admin.dec1224;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
* Created by admin on 2015/12/25.
*/
public class registerActivity extends Activity implements View.OnClickListener{
private Button register;
private Button back;
private String userName;
private String password;
private MyOpenHelper myOpenHelper;
public static final String createTableSql="create table if not exists userInfo (userId varchar,password varchar)";
private int Tag=0;
private SQLiteDatabase database;
private EditText editUser;
private EditText pwd;
private EditText pwdAgain;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
editUser=(EditText)findViewById(R.id.reg_userText);
pwd=(EditText)findViewById(R.id.reg_pwdText);
pwdAgain=(EditText)findViewById(R.id.reg_pwdagText);
register= (Button) findViewById(R.id.button3);
register.setTag(1);
register.setOnClickListener(this);
back=(Button)findViewById(R.id.button4);
back.setTag(2);
back.setOnClickListener(this);

}

@Override
public void onClick(View v) {
int Tag=(int)v.getTag();
switch (Tag){
case 1:
createDatabase();
createTable();
insertData();
Toast.makeText(registerActivity.this,"注册成功",Toast.LENGTH_LONG).show();
break;
case 2:
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
break;
default:
Toast.makeText(registerActivity.this,"注册失败,请再试一次",Toast.LENGTH_LONG).show();
break;

}

}

public void createDatabase(){
myOpenHelper=new MyOpenHelper(this,"mydb.db",null,1);
database=myOpenHelper.getWritableDatabase();

}

public void createTable(){
createDatabase();
database.execSQL(createTableSql);

}

public void insertData(){
pwdCorrect();
createDatabase();
String insertSql="insert into userInfo (userId,password) values ('"+editUser.getText().toString()+"','"+pwd.getText().toString()+"');";
database.execSQL(insertSql);
//        ContentValues cv=new ContentValues();
//        cv.put(userName,editUser.getText().toString());
//        cv.put(password,pwd.getText().toString());
//        database.insert("userInfo", null, cv);

}

public boolean pwdCorrect(){
if(pwd.getText().toString().equals(pwdAgain.getText().toString())){
return true;
}
Toast.makeText(registerActivity.this,"两次密码输入不一致,请重新输入。",Toast.LENGTH_LONG).show();
return false;

}
}


即插入数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: