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源码:
写好了activity_main.xml之后呢,我还在drawable文件夹下定义了一个edit_selector和一个button_selector.xml。是为了设置输入框获取焦点是的状态改变和button点击前后的状态改变。特别提醒android的空格是#&160; 不是 。
XML文件定义好之后,我们就获取组件并为其设置监听器。
这是登录界面的代码。当用户输入账号密码时,先进行判断该用户是否注册,即查询数据库。如果正确就跳转到另一个activity。
这是查询数据库并判断该用户是否已注册。
MyOpenHelper是一个继承了SQLiteOpenHelper的子类。第一个参数是context,第二个参数是String DatabaseName,要打开或创建的数据库名称,第三个参数是CursorFactory factory,用来创建cursor对象,默认为null。第四个参数为int version,数据库版本。
接下来我们看下注册界面的activity。
即插入数据。
首先创建布局文件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; } }
即插入数据。
相关文章推荐
- 关于android LayoutInflater.inflate()的参数及其用法
- android混合动画实现
- Android属性动画详解(上),初始属性动画的基本用法
- Android_2D绘图的学习Paint,Canvas(一)
- Android shape属性
- android--创建不同的bitmap
- Android项目中使用BeanUtils报异常
- android旋转动画的两种实现方式
- Android Lollipop联系人之PinnedListView简单使用
- 用TextView动态显示文件内容
- Android:Fragment Transition介绍
- android位移动画的两种实现方式
- Android几种layout(布局)的区别
- Android Material Design学习之三TabLayout
- android缩放动画的两种实现方法
- android studio 生成aar并使用
- android导出CSV,中文乱码问题
- android调整屏幕亮度
- android读取联系人的两种方式
- Android 自定义弹出框