初衷:寫這個功能主要是發現很多人寫註冊登入都把賬號密碼寫死,不能動態更新資料,讓我很不喜歡,根本滿足不了需求,
而且第一次安裝的人,如果不知道賬號和密碼,就無法登入,所以我覺得寫一個可以註冊使用者並登入的應用勢在必行。
優點: 這是一個比較完善的通過註冊使用者名稱和密碼,實時地更新資料庫中使用者名稱和密碼資訊,然後你在登入頁面,輸入使用者名稱和密碼
,查詢是否在資料庫中能找到已有的資訊與之匹配,若匹配,則可以登入主頁面,若不能匹配則說明不存在該使用者,提示登入失敗。
本博文用到的是LitePal,不懂的可以檢視我那篇關於LitePal的詳解
接下來是程式碼時間
1 //登入頁面 actibity_main.xml 2 <?xml version="1.0" encoding="utf-8"?> 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <TextView 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:textColor="@color/colorPrimary" 10 android:textSize="25sp" 11 android:text="登入介面" 12 android:layout_marginLeft="130sp" 13 android:layout_marginTop="150sp" 14 /> 15 <LinearLayout 16 android:layout_width="match_parent" 17 android:layout_height="wrap_content" 18 android:orientation="horizontal" 19 android:weightSum="1"> 20 <TextView 21 android:text="使用者名稱:" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:textSize="20sp" 25 android:layout_marginLeft="40sp" 26 /> 27 <EditText 28 android:hint="請輸入使用者名稱" 29 android:id="@+id/editname" 30 android:background="@android:drawable/alert_light_frame" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_weight="0.61" /> 34 </LinearLayout> 35 <LinearLayout 36 android:layout_width="match_parent" 37 android:layout_height="wrap_content" 38 android:orientation="horizontal" 39 android:weightSum="1"> 40 <TextView 41 android:text="密碼:" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:textSize="20sp" 45 android:layout_marginLeft="60sp"/> 46 <EditText 47 android:hint="請輸入密碼" 48 android:id="@+id/editpassword" 49 android:inputType="textPassword" 50 android:background="@android:drawable/alert_light_frame" 51 android:layout_width="wrap_content" 52 android:layout_height="wrap_content" 53 android:layout_weight="0.66" /> 54 </LinearLayout> 55 <LinearLayout 56 android:orientation="horizontal" 57 android:layout_width="match_parent" 58 android:layout_height="wrap_content"> 59 <Button 60 android:layout_width="wrap_content" 61 android:layout_height="wrap_content" 62 android:text="註冊" 63 android:id="@+id/register" 64 android:textSize="20sp" 65 android:layout_marginLeft="100sp"/> 66 <Button 67 android:layout_width="wrap_content" 68 android:layout_height="wrap_content" 69 android:text="登入" 70 android:id="@+id/login" 71 android:layout_marginLeft="40sp" 72 android:textSize="20sp"/> 73 </LinearLayout> 74 </LinearLayout>
1 //註冊頁面 login.xml 2 <?xml version="1.0" encoding="utf-8"?> 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <TextView 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:textColor="@color/colorPrimary" 10 android:textSize="25sp" 11 android:text="建立新使用者" 12 android:layout_marginLeft="130sp" 13 android:layout_marginTop="150sp" 14 /> 15 <LinearLayout 16 android:layout_width="match_parent" 17 android:layout_height="wrap_content" 18 android:orientation="horizontal" 19 android:weightSum="1"> 20 <TextView 21 android:text="使用者名稱:" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:textSize="20sp" 25 android:layout_marginLeft="40sp" 26 /> 27 <EditText 28 android:hint="請輸入使用者名稱" 29 android:id="@+id/edit_name" 30 android:background="@android:drawable/alert_light_frame" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_weight="0.61" /> 34 </LinearLayout> 35 <LinearLayout 36 android:layout_width="match_parent" 37 android:layout_height="wrap_content" 38 android:orientation="horizontal" 39 android:weightSum="1"> 40 <TextView 41 android:text="密碼:" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:textSize="20sp" 45 android:layout_marginLeft="60sp"/> 46 <EditText 47 android:id="@+id/edit_password" 48 android:hint="請輸入密碼" 49 android:background="@android:drawable/alert_light_frame" 50 android:layout_width="wrap_content" 51 android:layout_height="wrap_content" 52 android:layout_weight="0.66" /> 53 </LinearLayout> 54 55 <LinearLayout 56 android:orientation="horizontal" 57 android:layout_width="match_parent" 58 android:layout_height="wrap_content"> 59 <Button 60 android:layout_width="wrap_content" 61 android:layout_height="wrap_content" 62 android:text="建立新使用者" 63 android:id="@+id/creat" 64 android:textSize="20sp" 65 android:layout_marginLeft="90sp"/> 66 <Button 67 android:layout_width="wrap_content" 68 android:layout_height="wrap_content" 69 android:text="返回" 70 android:id="@+id/turnbefore" 71 android:layout_marginLeft="20sp" 72 android:textSize="20sp"/> 73 </LinearLayout> 74 </LinearLayout>
1 //登入成功的主頁面 jump.xml 2 <?xml version="1.0" encoding="utf-8"?> 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <TextView 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:text="成功登入主頁面" 10 android:textColor="@color/colorPrimaryDark" 11 android:layout_marginLeft="80sp" 12 android:layout_marginTop="160sp" 13 android:textSize="30sp"/> 14 </LinearLayout>
1 //Person類,用於使用者名稱和密碼的儲存 2 package cct.login; 3 import org.litepal.crud.DataSupport; 4 public class Person extends DataSupport{ 5 private String useName; 6 private String password; 7 public String getUseName() { 8 return useName; 9 } 10 public void setUseName(String useName) { 11 this.useName = useName; 12 } 13 public String getPassword() { 14 return password; 15 } 16 public void setPassword(String password) { 17 this.password = password; 18 } 19 }
1 //註冊介面的活動,LogActivity 2 package cct.login; 3 import android.content.Intent; 4 import android.os.Bundle; 5 import android.support.v7.app.AppCompatActivity; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widget.EditText; 9 import android.widget.Toast; 10 import org.litepal.tablemanager.Connector; 11 public class LogActivity extends AppCompatActivity implements View.OnClickListener{ 12 private EditText edit_name; 13 private EditText edit_password; 14 private Button creat; 15 private Button turnbefore; 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.login); 20 edit_name= (EditText) findViewById(R.id.edit_name); 21 edit_password= (EditText) findViewById(R.id.edit_password); 22 creat= (Button) findViewById(R.id.creat); 23 turnbefore= (Button) findViewById(R.id.turnbefore); 24 creat.setOnClickListener(this); 25 turnbefore.setOnClickListener(this); 26 } 27 @Override 28 public void onClick(View v) { 29 Person ps; 30 switch (v.getId()){ 31 case R.id.creat: 32 Connector.getDatabase(); 33 ps=new Person(); 34 String strname=edit_name.getText().toString(); 35 String strpassword=edit_password.getText().toString(); 36 ps.setUseName(strname); 37 ps.setPassword(strpassword); 38 ps.save(); 39 Toast.makeText(LogActivity.this,"建立新使用者成功",Toast.LENGTH_SHORT).show(); 40 break; 41 case R.id.turnbefore: 42 Intent it=new Intent(LogActivity.this,MainActivity.class); 43 startActivity(it); 44 break; 45 } 46 } 47 }
1 //重頭戲,登入頁面的活動 MainActivity 2 //註釋掉的部分是想的太複雜了,把資料庫裡面的資料拿去封裝成map, 3 //又封裝成list,然後又拆解成map,再拆成原資料,再與輸入的資料匹配 4 //不過通過這個我學會怎麼取list中的map中的資料,所以我沒有把原來的 5 //程式碼刪掉,而是註釋掉,給大家看看對比 6 package cct.login; 7 import android.content.Intent; 8 import android.support.v7.app.AppCompatActivity; 9 import android.os.Bundle; 10 import android.view.View; 11 import android.widget.Button; 12 import android.widget.EditText; 13 import android.widget.Toast; 14 import org.litepal.crud.DataSupport; 15 import java.util.ArrayList; 16 import java.util.HashMap; 17 import java.util.Iterator; 18 import java.util.List; 19 import java.util.Map; 20 21 public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 22 private EditText editname; 23 private EditText editpassword; 24 private Button register; 25 private Button login; 26 List<Map<String, String>> item; 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_main); 31 editname= (EditText) findViewById(R.id.editname); 32 editpassword= (EditText) findViewById(R.id.editpassword); 33 register= (Button) findViewById(R.id.register); 34 login= (Button) findViewById(R.id.login); 35 register.setOnClickListener(this); 36 login.setOnClickListener(this); 37 } 38 @Override 39 public void onClick(View v) { 40 switch (v.getId()) { 41 case R.id.register: 42 Intent it = new Intent(MainActivity.this, LogActivity.class); 43 startActivity(it); 44 break; 45 case R.id.login: 46 //設定成功匹配的標誌,假設為false,即假設不匹配 47 boolean flag=false; 48 //用來儲存遍歷中的使用者名稱 49 // String str1 = null; 50 //用來儲存遍歷中的密碼 51 // String str2 = null; 52 //申請有個用來存放(使用者和密碼)這個整體的list 53 //item = new ArrayList<Map<String, String>>(); 54 //LitePal裡面遍歷查詢所有資料的方法 55 List<Person> persons = DataSupport.findAll(Person.class); 56 //把資料庫裡面的資料取出,存在list中 57 for (Person ps : persons) { 58 // Map<String, String> map = new HashMap<String, String>(); 59 // //繫結使用者名稱和密碼 60 // map.put(ps.getUseName(),ps.getPassword()); 61 // //將其看作一個整體,放入list中 62 // item.add(map); 63 // } 64 // //遍歷每一項的list,得到其中的Map物件 65 // for (int i = 0; i < item.size(); i++) { 66 // Map<String, String> m = (Map<String, String>) item.get(i); 67 // //使用迭代法來取Map中的鍵(使用者名稱)和值(密碼),相當於解封裝,因為要分別驗證是否匹配 68 // Iterator<String> iterator = m.keySet().iterator(); 69 // while (iterator.hasNext()) { 70 // str1 = iterator.next(); 71 // str2 = m.get(str1); 72 //檢測是否匹配 73 if(editname.getText().toString().trim().equals(ps.getUseName()) && 74 (editpassword.getText().toString().trim().equals(ps.getPassword()))) 75 { 76 //匹配就設true 77 flag=true; 78 } 79 } 80 if (flag) 81 { 82 //如果匹配才進入主頁面 83 Intent s = new Intent(MainActivity.this, JumpActivity.class); 84 startActivity(s); 85 }else{ 86 Toast.makeText(MainActivity.this,"登入失敗",Toast.LENGTH_SHORT).show(); 87 } 88 break; 89 } 90 } 91 }
1 //最後是主頁面活動,僅僅用於跳轉 JUmpActivity 2 package cct.login; 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 public class JumpActivity extends AppCompatActivity { 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.jump); 10 } 11 }
最後不要忘記在AndroidManifest.xml檔案的裡新增
1 <application> 2 ...... 3 <activity android:name=".LogActivity"></activity> 4 <activity android:name=".JumpActivity"></activity> 5 </application>
以上是全部內容,若有錯誤的地方,歡迎指正。