很长时间没有写博客了,最近一直在写android for gis方面的项目。不过这篇博客就不写gis方面的了,今天刚刚做的一个简单的android登录系统。数据库是android自带的sqlite,sqlite的优势就不用我说了哈。下面进入正题。

1.数据库Help类

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

 1 public class DBHelper extends SQLiteOpenHelper { 2  3       public static final String TB_NAME = "user";      4         public static final String ID = "id";      5         public static final String NAME = "userid";      6         public static final String UerPwd = "userpwd";   7     public DBHelper(Context context, String name, CursorFactory factory, 8             int version) { 9         super(context, name, factory, version);10         this.getWritableDatabase();11         // TODO Auto-generated constructor stub12     }13 14     @Override15     //建立表16     public void onCreate(SQLiteDatabase arg0) {17         // TODO Auto-generated method stub18         arg0.execSQL("CREATE TABLE IF NOT EXISTS "      19                 + TB_NAME + " ("      20                 + ID + " INTEGER PRIMARY KEY,"      21                 + NAME + " VARCHAR,"    22                 + UerPwd + " VARCHAR)");23     }24 25     @Override26     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {27         // TODO Auto-generated method stub28 29     }30     //关闭数据库31     public void close()32     {33         this.getWritableDatabase().close();34     }35     //添加新用户36     public boolean AddUser(String userid,String userpwd)37     {38         try39         {40         ContentValues cv = new ContentValues();41         cv.put(this.NAME, userid);//添加用户名42         cv.put(this.UerPwd,userpwd);//添加密码43         this.getWritableDatabase().insert(this.TB_NAME,null,cv);44         return true;45         }46         catch(Exception ex)47         {48             return false;49         }50     }51 52 }
DBHelper

2.登录页面

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

  1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  2     xmlns:tools="http://schemas.android.com/tools"  3     android:layout_width="match_parent"  4     android:layout_height="match_parent"  5     android:gravity="center"  6     android:paddingBottom="@dimen/activity_vertical_margin"  7     android:paddingLeft="@dimen/activity_horizontal_margin"  8     android:paddingRight="@dimen/activity_horizontal_margin"  9     android:paddingTop="@dimen/activity_vertical_margin" 10     tools:context=".MainActivity" > 11  12     <LinearLayout 13         android:layout_width="fill_parent" 14         android:layout_height="150dp" 15         android:layout_alignParentTop="true" 16         android:layout_centerHorizontal="true" 17         android:orientation="vertical" > 18  19         <LinearLayout 20             android:id="@+id/lluser" 21             android:layout_width="match_parent" 22             android:layout_height="wrap_content" 23             android:layout_gravity="center" 24             android:gravity="center" 25             android:orientation="horizontal" > 26  27             <TextView 28                 android:id="@+id/tv_user" 29                 android:layout_width="wrap_content" 30                 android:layout_height="match_parent" 31                 android:layout_gravity="center" 32                 android:gravity="center" 33                 android:text="@string/tv_loginnum" 34                 android:textSize="18sp" /> 35  36             <EditText 37                 android:id="@+id/ed_user" 38                 android:layout_width="150dp" 39                 android:layout_height="40dp" 40                 android:layout_marginLeft="10dp" 41                 android:inputType="text" 42                 android:textSize="18sp" 43                 android:textStyle="normal" 44                 android:typeface="normal" > 45  46                 <requestFocus /> 47             </EditText> 48         </LinearLayout> 49  50         <LinearLayout 51             android:id="@+id/llpwd" 52             android:layout_width="match_parent" 53             android:layout_height="wrap_content" 54             android:layout_gravity="center" 55             android:layout_marginTop="10dp" 56             android:gravity="center" 57             android:orientation="horizontal" > 58  59             <TextView 60                 android:id="@+id/tv_pwd" 61                 android:layout_width="wrap_content" 62                 android:layout_height="match_parent" 63                 android:gravity="center" 64                 android:text="@string/tv_password" 65                 android:textSize="18sp" /> 66  67             <EditText 68                 android:id="@+id/ed_pwd" 69                 android:layout_width="150dp" 70                 android:layout_height="40dp" 71                 android:layout_marginLeft="10dp" 72                 android:inputType="textPassword" 73                 android:textSize="18sp" 74                 android:textStyle="normal" /> 75  76         </LinearLayout> 77  78         <LinearLayout 79             android:layout_width="match_parent" 80             android:layout_height="wrap_content" 81             android:layout_gravity="center" 82             android:layout_marginTop="10dp" 83             android:gravity="center" 84             android:orientation="horizontal" > 85  86             <Button 87                 android:id="@+id/btnlogin" 88                 android:layout_width="wrap_content" 89                 android:layout_height="match_parent" 90                 android:text="@string/txlogin" /> 91  92             <Button 93                 android:id="@+id/btnreg" 94                 android:layout_width="wrap_content" 95                 android:layout_height="match_parent" 96                 android:layout_gravity="center" 97                 android:layout_marginLeft="30dp" 98                 android:text="@string/txregister" /> 99 100 </LinearLayout>101     </LinearLayout>102 103 </RelativeLayout>
登录页面

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

 1 package com.example.login; 2  3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.content.Intent; 6 import android.database.Cursor; 7 import android.database.sqlite.SQLiteDatabase; 8 import android.view.Menu; 9 import android.view.View;10 import android.widget.Button;11 import android.widget.EditText;12 import android.widget.Toast;13 14 public class MainActivity extends Activity {15 16     EditText ed_id;17     EditText ed_pwd;18     DBHelper database;19     @Override20     protected void onCreate(Bundle savedInstanceState) {21         super.onCreate(savedInstanceState);22         setContentView(R.layout.activity_main);23         ed_id=(EditText)findViewById(R.id.ed_user);24         ed_pwd=(EditText)findViewById(R.id.ed_pwd);25         Button btnlogin=(Button)findViewById(R.id.btnlogin);26          database = new DBHelper(MainActivity.this,"LoginInfo",null,1);//这段代码放到Activity类中才用this27         btnlogin.setOnClickListener(new View.OnClickListener() {28             29             @Override30             public void onClick(View v) {31                 // TODO Auto-generated method stub32                 getUser();33             }34         });35         Button btnreg=(Button)findViewById(R.id.btnreg);36         btnreg.setOnClickListener(new View.OnClickListener() {37             38             @Override39             public void onClick(View v) {40                 // TODO Auto-generated method stub41                 Intent intent=new Intent();42                 intent.setClass(MainActivity.this, UserRegister.class);43                 startActivity(intent);44             }45         });46     }47      public void getUser()48      {49          String sql="select * from user where userid=?";50             Cursor cursor=database.getWritableDatabase().rawQuery(sql, new String[]{ed_id.getText().toString()});51             if(cursor.moveToFirst())52             {53                 54               if(ed_pwd.getText().toString().equals(cursor.getString(cursor.getColumnIndex("userpwd"))))55               {56                   Toast.makeText(this, "登录成功", 5000).show();57               }58               else59               {60                   Toast.makeText(this, "用户名或者密码错误", 5000).show();61               }62             }63              database.close();64      }65         @Override66     public boolean onCreateOptionsMenu(Menu menu) {67         // Inflate the menu; this adds items to the action bar if it is present.68         getMenuInflater().inflate(R.menu.main, menu);69         return true;70     }71 72 }
登录界面代码

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

3.注册页面

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

  1 <?xml version="1.0" encoding="utf-8"?>  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     android:layout_width="match_parent"  4     android:layout_height="match_parent"  5     android:gravity="center" >  6   7      <LinearLayout  8          android:layout_width="fill_parent"  9          android:layout_height="200dp" 10          android:layout_alignParentTop="true" 11          android:layout_centerHorizontal="true" 12          android:gravity="center" 13          android:orientation="vertical" > 14  15         <LinearLayout 16             android:id="@+id/lluserreg" 17             android:layout_width="match_parent" 18             android:layout_height="wrap_content" 19             android:layout_gravity="center" 20             android:orientation="horizontal" > 21  22             <TextView 23                 android:id="@+id/tv_userreg" 24                 android:layout_width="wrap_content" 25                 android:layout_height="match_parent" 26                 android:layout_gravity="center" 27                 android:gravity="center" 28                 android:text="@string/tv_loginnum" 29                 android:textSize="18sp" /> 30  31             <EditText 32                 android:id="@+id/ed_userreg" 33                 android:layout_width="150dp" 34                 android:layout_height="40dp" 35                 android:layout_marginLeft="60dp" 36                 android:inputType="text" 37                 android:textSize="18sp" 38                 android:textStyle="normal" 39                 android:typeface="normal" > 40  41                 <requestFocus /> 42             </EditText> 43         </LinearLayout> 44  45         <LinearLayout 46             android:id="@+id/llpwdreg" 47             android:layout_width="match_parent" 48             android:layout_height="wrap_content" 49             android:layout_gravity="center" 50             android:layout_marginTop="10dp" 51             android:orientation="horizontal" > 52  53             <TextView 54                 android:id="@+id/tv_pwdreg" 55                 android:layout_width="wrap_content" 56                 android:layout_height="match_parent" 57                 android:gravity="center" 58                 android:text="@string/tv_password" 59                 android:textSize="18sp" /> 60  61             <EditText 62                 android:id="@+id/ed_pwdreg" 63                 android:layout_width="150dp" 64                 android:layout_height="40dp" 65                 android:layout_marginLeft="60dp" 66                 android:inputType="textPassword" 67                 android:textSize="18sp" 68                 android:textStyle="normal" /> 69  70         </LinearLayout> 71  72                <LinearLayout 73                    android:id="@+id/llpwdreg2" 74                    android:layout_width="match_parent" 75                    android:layout_height="wrap_content" 76                    android:layout_gravity="center" 77                    android:layout_marginTop="10dp" 78                    android:orientation="horizontal" > 79  80                    <TextView 81                        android:id="@+id/tv_pwdreg2" 82                        android:layout_width="wrap_content" 83                        android:layout_height="match_parent" 84                        android:gravity="center" 85                        android:text="@string/tv_conregpwd" 86                        android:textSize="18sp" /> 87  88             <EditText 89                 android:id="@+id/ed_pwdreg2" 90                 android:layout_width="150dp" 91                 android:layout_height="40dp" 92                 android:layout_marginLeft="22dp" 93                 android:inputType="textPassword" 94                 android:textSize="18sp" 95                 android:textStyle="normal" /> 96  97         </LinearLayout> 98         <LinearLayout 99             android:layout_width="match_parent"100             android:layout_height="wrap_content"101             android:layout_gravity="center"102             android:layout_marginTop="10dp"103             android:gravity="center"104             android:orientation="horizontal" >105 106             <Button107                 android:id="@+id/btnsub"108                 android:layout_width="wrap_content"109                 android:layout_height="match_parent"110                 android:text="@string/txsubmit" />111 112             <Button113                 android:id="@+id/btncancel"114                 android:layout_width="wrap_content"115                 android:layout_height="match_parent"116                 android:layout_gravity="center"117                 android:layout_marginLeft="30dp"118                 android:text="@string/txcancel" />119 120 </LinearLayout>121     </LinearLayout>122 123 </RelativeLayout>
用户注册

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

 1 package com.example.login; 2  3 import android.app.Activity; 4 import android.content.Intent; 5 import android.database.Cursor; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.EditText;10 import android.widget.Toast;11 12 public class UserRegister extends Activity {13     14     EditText edtext;15     EditText edpwd;16     EditText edpwd2;17     protected void onCreate(Bundle savedInstanceState)18     {19         super.onCreate(savedInstanceState);20         setContentView(R.layout.user_add);21         Button btnsub=(Button)findViewById(R.id.btnsub);22         edtext=(EditText)findViewById(R.id.ed_userreg);23         edpwd=(EditText)findViewById(R.id.ed_pwdreg);24         edpwd2=(EditText)findViewById(R.id.ed_pwdreg2);25         btnsub.setOnClickListener(new View.OnClickListener() {26             27             @Override28             public void onClick(View v) {29                 // TODO Auto-generated method stub30                 setUser();31             }32         });33     Button btncancel=(Button)findViewById(R.id.btncancel);34     btncancel.setOnClickListener(new View.OnClickListener() {35         36         @Override37         public void onClick(View v) {38             // TODO Auto-generated method stub39             finish();40         }41     });42 43     }44     private void setUser()45     {46         DBHelper database=new DBHelper(UserRegister.this,"LoginInfo",null,1);47         48     49         if(edtext.getText().toString().length()<=0||edpwd.getText().toString().length()<=0||edpwd2.getText().toString().length()<=0)50         {51             Toast.makeText(this, "用户名或密码不能为空", 5000).show();52             return;53         }54         if(edtext.getText().toString().length()>0)55         {56             String sql="select * from user where userid=?";57             Cursor cursor=database.getWritableDatabase().rawQuery(sql, new String[]{edtext.getText().toString()});58             if(cursor.moveToFirst())59             {60                 Toast.makeText(this, "用户名已经存在", 5000).show();61                 return;62             }63         }64         if(!edpwd.getText().toString().equals(edpwd2.getText().toString()))65         {66             Toast.makeText(this, "两次输入的密码不同", 5000).show();67             return;68         }69         if(database.AddUser(edtext.getText().toString(), edpwd.getText().toString()))70         {71             Toast.makeText(this, "用户注册成功", 5000).show();72             Intent intent=new Intent();73             intent.setClass(this, MainActivity.class);74             startActivity(intent);75         }76         else77         {78             Toast.makeText(this, "用户注册失败", 5000).show();79         }80         database.close();81     }82 83 }
界面注册

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

4.界面截图

Android简单登录系统_第1张图片

Android简单登录系统_第2张图片

Android简单登录系统_第3张图片

Android简单登录系统_第4张图片

5.Sqlite相关知识

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。

方法名 方法描述
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 构造方法,一般是传递一个要创建的数据库名称那么参数
onCreate(SQLiteDatabase db) 创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用
getReadableDatabase() 创建或打开一个只读数据库
getWritableDatabase() 创建或打开一个读写数据库

SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下

(返回值)方法名 方法描述
(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句
(void) close() 关闭数据库
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集
(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)

更多相关文章

  1. Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据
  2. android 连接远程数据库
  3. Android:SNS客户端开发四:数据库操作(二)
  4. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
  5. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
  6. android保存用户名密码
  7. android升级数据库(Sqlite)简单示例

随机推荐

  1. Android平台版本大全(注意版本号首字母原
  2. 第四章 ListView 使用技巧
  3. 有EditText的activity和输入法的配合使用
  4. Windows下Android平台搭建_4
  5. android开机自启动app
  6. ListView的Item中包含checkbox,Item无法点
  7. Dojo mobile TweetView 系列教程之五 —
  8. 2018-03-18Android笔记之Activity生命周
  9. Android中的Handler总结
  10. android不透明度对应的值