欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于SQLite的Android登錄APP

 更新時(shí)間:2021年01月27日 10:54:01   作者:呱呱花  
這篇文章主要為大家詳細(xì)介紹了基于SQLite的Android登錄APP,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

基于SQLite的Android登錄APP

該登錄APP主要包括三個(gè)模塊:

1、登錄:用戶選擇登錄方式、登錄身份,輸入賬號(hào)密碼,完成登錄。
2、忘記密碼:用戶輸入新密碼及驗(yàn)證碼修改登錄密碼。
3、個(gè)人信息:用戶完成登錄后設(shè)置個(gè)人信息并顯示。

使用控件:

1、單選按鈕RadioButton:區(qū)分是密碼登錄還是驗(yàn)證碼登錄。
2、下拉框Spinner:區(qū)分是個(gè)人用戶還是公司用戶。
3、編輯框EditText:輸入手機(jī)號(hào)和密碼(或驗(yàn)證碼)。
4、復(fù)選框CheckBox:判斷是否記住密碼。
5、相對(duì)布局RelativeLayout:界面的整體布局,方便將各個(gè)控件按照相對(duì)位置擺放。
6、框架布局FrameLayout:在框架布局中后面添加的子視圖會(huì)把之前的子視圖覆蓋掉,一般用于需要重疊顯示的場(chǎng)合。用于實(shí)現(xiàn)忘記密碼按鈕和密碼輸入框的疊加。

采用的存儲(chǔ)方式

1、共享參數(shù)SharedPreferences:

是Android的一個(gè)輕量級(jí)存儲(chǔ)工具,采用的存儲(chǔ)結(jié)構(gòu)是Key-Value的鍵值對(duì)方式,類似于Java的Properties類,都是把Key-Value的鍵值對(duì)保存在配置文件中,不同的是Properties的文件內(nèi)容是Key=Value的形式,而SharedPreferences的存儲(chǔ)介質(zhì)是符合XML規(guī)范的配置文件。本案例中用于保存用戶的賬號(hào)和密碼。

2、數(shù)據(jù)庫(kù)SQLite:

是一個(gè)小巧的嵌入式數(shù)據(jù)庫(kù)。本案例中用于存儲(chǔ)用戶的個(gè)人信息。

成果展示:

界面設(shè)計(jì):

1. 登錄界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".LoginActivity"
 android:paddingTop="10dp"
 android:padding="8dp">

 <RadioGroup
 android:id="@+id/rg_login_way"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal"
 android:layout_marginTop="20dp">

 <RadioButton
  android:id="@+id/rb_password"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="密碼登錄"
  android:textSize="25sp" />
 <RadioButton
  android:id="@+id/rb_checkcode"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="驗(yàn)證碼登錄"
  android:layout_marginLeft="50dp"
  android:textSize="25sp" />

 </RadioGroup>
 <TextView
 android:id="@+id/tv_shenfen"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="我是:"
 android:layout_below="@+id/rg_login_way"
 android:textSize="25sp"
 android:layout_marginTop="40dp"
 android:textColor="@color/black"
 android:layout_marginLeft="30dp"
 android:layout_alignRight="@+id/tv_phonenum"/>
 <Spinner
 android:id="@+id/sp_shenfen"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_shenfen"
 android:layout_alignBottom="@+id/tv_shenfen"

 android:spinnerMode="dialog"/>

 <TextView
 android:id="@+id/tv_phonenum"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/tv_shenfen"
 android:text="手機(jī)號(hào)碼:"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_marginTop="40dp"/>
 <EditText
 android:id="@+id/et_phone"
 android:layout_width="match_parent"
 android:layout_height="50dp"
 android:layout_alignBaseline="@id/tv_phonenum"
 android:layout_toRightOf="@+id/tv_phonenum"
 android:background="@drawable/eb_selector"
 android:textSize="25sp"
 android:hint="請(qǐng)輸入手機(jī)號(hào)碼"
 android:inputType="number" />

 <TextView
 android:id="@+id/tv_psw"
 android:layout_width="wrap_content"
 android:layout_height="40dp"
 android:text="登錄密碼:"
 android:layout_below="@id/tv_phonenum"
 android:textSize="25sp"
 android:layout_marginTop="40dp"
 android:textColor="@color/black"/>
 <FrameLayout
 android:id="@+id/fm_psw"
 android:layout_width="match_parent"
 android:layout_height="50dp"
 android:layout_toRightOf="@id/tv_psw"
 android:layout_alignBottom="@+id/tv_psw"
 android:layout_alignLeft="@+id/et_phone">

 <EditText
  android:id="@+id/et_psw"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:hint="請(qǐng)輸入密碼"
  android:textSize="25sp"
  android:background="@drawable/eb_selector" />
 <Button
  android:id="@+id/btn_pswforget"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:text="忘記密碼"
  android:textSize="25sp"
  android:background="@color/darkgray"
  android:padding="10dp"
  android:layout_gravity="end"/>
 </FrameLayout>

 <CheckBox
 android:id="@+id/cb_pswrmb"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/tv_psw"
 android:text="記住密碼"
 android:textSize="25sp"
 android:layout_marginTop="30dp"/>
 <Button
 android:id="@+id/btn_login"
 android:layout_width="match_parent"
 android:layout_height="60dp"
 android:layout_below="@id/cb_pswrmb"
 android:text="登錄"
 android:textSize="25sp"
 android:layout_marginTop="30dp"
 android:background="@color/darkgray"/>


</RelativeLayout>

2.忘記密碼界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:padding="8dp"
 android:paddingTop="10dp"
 tools:context=".PswForgetActivity">
 <TextView
 android:id="@+id/tv_newpsw"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="輸入新密碼:"
 android:textColor="@color/black"
 android:textSize="25sp"
 android:layout_marginTop="20dp"/>
 <EditText
 android:id="@+id/et_newpsw"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_newpsw"
 android:background="@drawable/eb_selector"
 android:layout_alignBaseline="@+id/tv_newpsw"
 android:hint="請(qǐng)輸入新密碼"
 android:textSize="25sp"
 android:inputType="textPassword"
 />
 <TextView
 android:id="@+id/tv_chknewpsw"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="40dp"
 android:text="確認(rèn)新密碼:"
 android:layout_below="@+id/tv_newpsw"
 android:textSize="25sp"
 android:textColor="@color/black"/>
 <EditText
 android:id="@+id/et_chknewpsw"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_chknewpsw"
 android:layout_alignBaseline="@+id/tv_chknewpsw"
 android:background="@drawable/eb_selector"
 android:textSize="25sp"
 android:hint="請(qǐng)?jiān)俅屋斎胄旅艽a"
 android:inputType="textPassword"/>
 <TextView
 android:id="@+id/tv_checkcode"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="驗(yàn)證碼:"
 android:layout_below="@+id/tv_chknewpsw"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_marginTop="40dp"/>
 <FrameLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_checkcode"
 android:layout_below="@+id/et_chknewpsw"
 android:layout_marginTop="20dp">
 <EditText
  android:id="@+id/et_checkcode"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:textSize="25sp"
  android:hint="輸入驗(yàn)證碼"
  android:inputType="number"
  android:background="@drawable/eb_selector"
  android:maxLines="1"/>
 <Button
  android:id="@+id/btn_sendcheckcode"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:layout_gravity="right"
  android:text="獲取驗(yàn)證碼"
  android:textSize="25sp"
  android:padding="10dp"
  android:textColor="@color/black"
  android:background="@color/darkgray"/>

 </FrameLayout>

 <Button
 android:id="@+id/btn_check"
 android:layout_width="match_parent"
 android:layout_height="60dp"
 android:layout_below="@id/tv_checkcode"
 android:text="確定"
 android:textSize="25sp"
 android:layout_marginTop="30dp"
 android:background="@color/darkgray" />


</RelativeLayout>

3.個(gè)人信息填寫界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".SharedPreferencesActivity"
 android:padding="10dp">
 <TextView
 android:id="@+id/tv_name"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="姓名:"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_marginTop="20dp"/>
 <EditText
 android:id="@+id/et_name"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_name"
 android:layout_alignBaseline="@+id/tv_name"
 android:background="@drawable/eb_selector"
 android:maxLines="1"/>

 <TextView
 android:id="@+id/tv_age"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="年齡:"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_below="@+id/tv_name"
 android:layout_marginTop="20dp"/>
 <EditText
 android:id="@+id/et_age"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_age"
 android:layout_alignBaseline="@+id/tv_age"
 android:background="@drawable/eb_selector"
 android:maxLines="1"
 android:inputType="number"/>
 <TextView
 android:id="@+id/tv_height"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="身高:"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_below="@+id/tv_age"
 android:layout_marginTop="20dp"/>
 <EditText
 android:id="@+id/et_height"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_height"
 android:layout_alignBaseline="@+id/tv_height"
 android:background="@drawable/eb_selector"
 android:maxLines="1"
 android:inputType="number"/>
 <TextView
 android:id="@+id/tv_weight"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="體重:"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_below="@+id/tv_height"
 android:layout_marginTop="20dp"/>
 <EditText
 android:id="@+id/et_weight"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/tv_weight"
 android:layout_alignBaseline="@+id/tv_weight"
 android:background="@drawable/eb_selector"
 android:maxLines="1"
 android:inputType="number"/>
 <TextView
 android:id="@+id/tv_married"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="婚否:"
 android:layout_below="@+id/tv_weight"
 android:textSize="25sp"
 android:textColor="@color/black"
 android:layout_marginTop="20dp"/>
 <Spinner
 android:id="@+id/sp_married"
 android:layout_width="match_parent"
 android:layout_height="40dp"
 android:spinnerMode="dropdown"
 android:layout_toRightOf="@+id/tv_married"
 android:layout_alignBottom="@+id/tv_married"/>

 <Button
 android:id="@+id/btn_save"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@+id/tv_married"
 android:layout_marginTop="20dp"
 android:background="@drawable/selector"
 android:text="保存"
 android:textSize="25sp"
 android:textColor="@color/black"/>

</RelativeLayout>

4.個(gè)人信息顯示界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".SharedPreferencesActivity2">

 <TextView
 android:id="@+id/tv_show"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@+id/btn_delete"
 android:textSize="25sp"/>
 <Button
 android:id="@+id/btn_delete"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="刪除"
 android:textSize="25sp"/>

</RelativeLayout>

代碼實(shí)現(xiàn)

UserDBHelper

package com.example.helloworld;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


import androidx.annotation.Nullable;
import androidx.core.app.NavUtils;

import java.util.ArrayList;
import java.util.Locale;

public class UserDBHelper extends SQLiteOpenHelper {

 private static final String TAG = "UserDBHelper";
 private static final String DB_NAME = "user.db"; //數(shù)據(jù)庫(kù)名
 private static final int DB_VERSION = 1;  //數(shù)據(jù)庫(kù)版本
 private static UserDBHelper mHelper = null;
 private SQLiteDatabase mDB = null;
 private static final String TABLE_NAME = "user_info"; //表名

 private UserDBHelper(Context context){
 super(context,DB_NAME,null,DB_VERSION);

 }

 private UserDBHelper(Context context,int version){
 super(context,DB_NAME,null,version);
 }

 public static UserDBHelper getInstance(Context context,int version){
 if(version > 0 && mHelper == null){
  mHelper = new UserDBHelper(context,version);
 }else if(mHelper == null){
  mHelper = new UserDBHelper(context);
 }
 return mHelper;
 }

 public SQLiteDatabase openReadLink(){
 if (mDB == null || !mDB.isOpen()){
  mDB = mHelper.getReadableDatabase();
 }
 return mDB;
 }

 public SQLiteDatabase openWriteLink(){
 if (mDB == null || !mDB.isOpen()){
  mDB = mHelper.getWritableDatabase();
  Log.d(TAG, "openWriteLink: 打開了讀數(shù)據(jù)庫(kù)");
 }
 return mDB;
 }

 public void closeLink(){
 if (mDB != null && mDB.isOpen()){
  mDB.close();
  mDB = null;
 }
 }

 public String getDBName(){
 if(mHelper != null){
  return mHelper.getDatabaseName();
 }else {
  return DB_NAME;
 }
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
 Log.d(TAG, "onCreate: 創(chuàng)建數(shù)據(jù)庫(kù)");
 String drop_sql = "DROP TABLE IF EXISTS " + TABLE_NAME + ";";
 db.execSQL(drop_sql);
 String create_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
  + "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
  + "name VARCHAR NOT NULL,"
  + "age INTEGER NOT NULL,"
  + "height LONG NOT NULL,"
  + "weight FLOAT NOT NULL,"
  + "married INTEGER NOT NULL,"
  + "update_time VARCHAR NOT NULL,"
  + "phone VARCHAR NOT NULL,"
  + "password VARCHAR NOT NULL"
  + ");";
 Log.d(TAG, "create_sql" + create_sql);
 db.execSQL(create_sql);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 Log.d(TAG, "onUpgrade oldVersion=" +oldVersion+",newVersion=" + newVersion+"數(shù)據(jù)庫(kù)新舊版本號(hào)");
 if (newVersion > 1){
  String alter_sql = "ALTER TABLE" + TABLE_NAME + "ADD COLUMN" + "phone VARCHAR;";
  Log.d(TAG, "alter_sql:" + alter_sql);
  db.execSQL(alter_sql);
  alter_sql = "ALTER TABLE" + TABLE_NAME + "ADD COLUMN" + "password VARCHAR;";
  Log.d(TAG, "alter_sql:" + alter_sql);
  db.execSQL(alter_sql);
 }
 }

 public int delete(String condition){
 int count = mDB.delete(TABLE_NAME,condition,null);
 return count;
 }
 public int deleteAll(){
 int count = mDB.delete(TABLE_NAME,"1=1",null);
 return count;
 }

 public long insert(UserInfo info){
 ArrayList<UserInfo> infoArray = new ArrayList<UserInfo>();
 infoArray.add(info);
 return insert(infoArray);
 }

 public ArrayList<UserInfo>query(String condition) {
 String sql = String.format(Locale.CHINA,"select rowid,_id,name,age,height,weight,married,update_time," + "phone,password from %s where %s;", TABLE_NAME,condition);
 Log.d(TAG, "query sql: " + sql);
 ArrayList<UserInfo> infoArray = new ArrayList<UserInfo>();
 Cursor cursor = mDB.rawQuery(sql, null);
 while (cursor.moveToNext()) {
  UserInfo info = new UserInfo();
  info.rowid = cursor.getLong(0);
  info.xuhao = cursor.getInt(1);
  info.name = cursor.getString(2);
  info.age = cursor.getInt(3);
  info.height = cursor.getLong(4);
  info.weight = cursor.getFloat(5);
  info.married = (cursor.getInt(6) == 0) ? false : true;
  info.update_time = cursor.getString(7);
  info.phone = cursor.getString(8);
  info.password = cursor.getString(9);
  infoArray.add(info);
 }
 cursor.close();
 return infoArray;
 }

 public long insert(ArrayList<UserInfo> infoArray) {
 long result = -1;
 for (int i = 0; i < infoArray.size(); i++) {
  UserInfo info = infoArray.get(i);
  ArrayList<UserInfo> tempArray = new ArrayList<UserInfo>();
  
  if (info.name != null && info.name.length() > 0) {
  String condition = String.format("name='%s'", info.name);
  tempArray = query(condition);
  if (tempArray.size() > 0) {
   update(info, condition);
   result = tempArray.get(0).rowid;
   continue;
  }
  }
  
  if (info.phone != null && info.phone.length() > 0) {
  String condition = String.format("phone='%s'", info.phone);
  tempArray = query(condition);
  if (tempArray.size() > 0) {
   update(info, condition);
   result = tempArray.get(0).rowid;
   continue;
  }
  }
  Log.d(TAG, "insert: 當(dāng)前版本號(hào)"+mDB.getVersion());

  ContentValues cv = new ContentValues();
  cv.put("name", info.name);
  cv.put("age", info.age);
  cv.put("height", info.height);
  cv.put("weight", info.weight);
  cv.put("married", info.married);
  cv.put("update_time", info.update_time);
  cv.put("phone", info.phone);
  cv.put("password", info.password);
  result = mDB.insert(TABLE_NAME, "", cv);
  if (result == -1) {
  return result;
  }
 }
 return result;
 }

 public int update(UserInfo info, String condition) {
 ContentValues cv = new ContentValues();
 cv.put("name", info.name);
 cv.put("age", info.age);
 cv.put("height", info.height);
 cv.put("weight", info.weight);
 cv.put("married", info.married);
 cv.put("update_time", info.update_time);
 cv.put("phone", info.phone);
 cv.put("password", info.password);
 // 執(zhí)行更新記錄動(dòng)作,該語句返回記錄更新的數(shù)目
 return mDB.update(TABLE_NAME, cv, condition, null);
 }


 public int update(UserInfo info) {
 return update(info, "rowid=" + info.rowid);
 }


 public UserInfo queryByPhone(String phone){
 UserInfo info = null;
 ArrayList<UserInfo> infoArray = query(String.format("phone=%s",phone));
 if (infoArray.size() > 0 ){
  info = infoArray.get(0);
 }
 return info;
 }
}

UserInfo

package com.example.helloworld;

public class UserInfo {
 public long rowid;
 public int xuhao;
 public String name;
 public int age;
 public long height;
 public float weight;
 public boolean married;
 public String update_time;
 public String phone;
 public String password;

 public UserInfo() {
 rowid = 0l;
 xuhao = 0;
 name = "";
 age = 0;
 height = 0l;
 weight = 0.0f;
 married = false;
 update_time = "";
 phone = "";
 password = "";
 }
}

LoginActivity

package com.example.helloworld;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Bundle;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.text.method.TransformationMethod;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import java.net.PasswordAuthentication;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
 private EditText et_phone;
 private RadioButton rb_psw;
 private RadioButton rb_checkcode;
 private EditText et_psw;
 private Button btn_pswforget;
 private String mPassword;
 private int mRequestcode; 
 private String mCheckCode;
 private int mType;
 private String TAG = "huahua";


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_login);
 rb_psw = findViewById(R.id.rb_password);
 rb_checkcode = findViewById(R.id.rb_checkcode);
 et_phone = findViewById(R.id.et_phone);
 et_psw = findViewById(R.id.et_psw);
 CheckBox cb_pswforget = findViewById(R.id.cb_pswrmb);
 Button btn_login = findViewById(R.id.btn_login);
 btn_pswforget = findViewById(R.id.btn_pswforget);
 btn_login.setOnClickListener(this);
 btn_pswforget.setOnClickListener(this);
 RadioGroup rg = findViewById(R.id.rg_login_way);
 mPassword = et_psw.getText().toString();

 rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(RadioGroup group, int checkedId) {
  RadioButton rb = findViewById(checkedId);
  Log.i(TAG, "onCheckedChanged: 密碼登錄"+ rb_psw.isChecked());
  Log.i(TAG, "onCheckedChanged: 驗(yàn)證碼登錄"+rb_checkcode.isChecked());
  if(rb_psw.isChecked()){
   et_psw.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
  }
  }
 });

 cb_pswforget.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

  }
 });

 ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this,R.layout.item_dropdown,typeArray);
 typeAdapter.setDropDownViewResource(R.layout.item_dropdown);
 Spinner sp_type = findViewById(R.id.sp_shenfen);
 sp_type.setAdapter(typeAdapter);
 sp_type.setSelection(0);
 sp_type.setPrompt("選擇你的登錄身份:");
 sp_type.setOnItemSelectedListener(new MyOnItemSeclectedListener());
 }
 private String[] typeArray = {"個(gè)人用戶","企業(yè)用戶"};
 private class MyOnItemSeclectedListener implements AdapterView.OnItemSelectedListener{
 @Override
 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  mType = position;
 }

 @Override
 public void onNothingSelected(AdapterView<?> parent) {

 }
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == mRequestcode && data != null) {
  mPassword = data.getStringExtra("newpsw");
 }
 }

 @Override
 protected void onRestart() {
 et_psw.setText("");
 super.onRestart();
 }

 @Override
 public void onClick(View v) {
 String phone = et_phone.getText().toString();
 switch (v.getId()){
  case R.id.btn_pswforget: {
  Log.i(TAG, "onClick: 點(diǎn)擊了忘記密碼");
  if (phone == null || phone.length() < 11) {
   Toast.makeText(this, "請(qǐng)輸入正確的手機(jī)號(hào)", Toast.LENGTH_SHORT).show();
   return;
  }
  if (rb_psw.isChecked()) {
   Log.i(TAG, "onClick: 進(jìn)入忘記密碼界面");
   Intent intent = new Intent(this, PswForgetActivity.class);
   intent.putExtra("phone", phone);
   startActivityForResult(intent, mRequestcode);
  } else if (rb_checkcode.isChecked()) {
   mCheckCode = String.format("%06d", (int) (Math.random() * 1000000 % 1000000));
   Log.i(TAG, "onClick: 發(fā)送驗(yàn)證碼");
   AlertDialog.Builder builder = new AlertDialog.Builder(this);
   builder.setTitle("請(qǐng)記住驗(yàn)證碼!");
   builder.setMessage("手機(jī)號(hào)" + phone + ",本次驗(yàn)證碼是:" + mCheckCode + ",請(qǐng)輸入驗(yàn)證碼");
   builder.setPositiveButton("確定", null);
   AlertDialog alert = builder.create();
   alert.show();
  }
  }
  break;
  case R.id.btn_login: {
  if (phone == null || phone.length() < 11) {
   Toast.makeText(this, "請(qǐng)輸入正確的手機(jī)號(hào)!", Toast.LENGTH_SHORT).show();
   Log.i(TAG, "onClick: 驗(yàn)證密碼");
   return;
  }
  if (rb_psw.isChecked()) {
   if (!et_psw.getText().toString().equals(mPassword) || et_psw.getText().toString().equals("")) {
   Toast.makeText(this, "請(qǐng)輸入正確的密碼", Toast.LENGTH_SHORT).show();
   return;
   } else {
   loginSuccess();
   }
  } else if (rb_checkcode.isChecked()) {
   if (!et_psw.getText().toString().equals(mCheckCode)) {
   Toast.makeText(this, "請(qǐng)輸入正確的驗(yàn)證碼", Toast.LENGTH_SHORT).show();
   return;
   } else {
   loginSuccess();
   }
  }
  }
 }
 }
 private void loginSuccess(){
 String desc = String.format("您的手機(jī)號(hào)碼是%s,類型是%s。恭喜你通過登錄驗(yàn)證,點(diǎn)擊“確定”按鈕返回上個(gè)頁(yè)面",et_phone.getText().toString(),typeArray[mType]);
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setTitle("登錄成功");
 builder.setMessage(desc);
 builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
  Intent intent = new Intent(LoginActivity.this,SharedPreferencesActivity.class);
  startActivity(intent);
  SharedPreferences sps = getSharedPreferences("Login", Context.MODE_PRIVATE);
  SharedPreferences.Editor editor = sps.edit();
  editor.putString("phone",et_phone.getText().toString());
  editor.putString("password",et_psw.getText().toString());
  editor.apply();
  }
 });
 builder.setNegativeButton("取消",null);
 AlertDialog alert = builder.create();
 alert.show();
 }
}

PswForgetActivity

package com.example.helloworld;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.Toast;

public class PswForgetActivity extends AppCompatActivity implements View.OnClickListener {
 private EditText et_newpsw;
 private EditText et_chknewpsw;
 private EditText et_checkcode;
 private String mCheckCode;
 private String mPhone;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_psw_forget);
 et_newpsw = findViewById(R.id.et_newpsw);
 et_chknewpsw = findViewById(R.id.et_chknewpsw);
 et_checkcode = findViewById(R.id.et_checkcode);
 findViewById(R.id.btn_sendcheckcode).setOnClickListener(this);
 findViewById(R.id.btn_check).setOnClickListener(this);
 mPhone = getIntent().getStringExtra("phone");
 et_newpsw.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
 et_chknewpsw.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
 }

 @Override
 public void onClick(View v) {
 switch (v.getId()){
  case R.id.btn_sendcheckcode:
  if(mPhone == null || mPhone.length() < 11){
   Toast.makeText(this,"請(qǐng)輸入正確的手機(jī)號(hào)",Toast.LENGTH_SHORT).show();
   return;
  }
  mCheckCode = String.format("%06d",(int)(Math.random()*1000000%1000000));
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setTitle("請(qǐng)記住驗(yàn)證碼");
  builder.setMessage("手機(jī)號(hào)"+mPhone+",本次驗(yàn)證碼是"+mCheckCode+",請(qǐng)輸入驗(yàn)證碼");
  builder.setPositiveButton("確定",null);
  AlertDialog alertDialog = builder.create();
  alertDialog.show();
  case R.id.btn_check:
  String newpsw = et_newpsw.getText().toString();
  String chknewpsw = et_chknewpsw.getText().toString();
  if(newpsw == null || newpsw.length() < 6 || chknewpsw == null || chknewpsw.length() < 6){
   Toast.makeText(this,"請(qǐng)輸入正確的新密碼",Toast.LENGTH_SHORT).show();
   return;
  }else if(!newpsw.equals(chknewpsw)){
   Toast.makeText(this,"兩次輸入的新密碼不一致",Toast.LENGTH_SHORT).show();
   return;
  }else if(!et_checkcode.getText().toString().equals(mCheckCode)){
   Toast.makeText(this,"請(qǐng)輸入正確的驗(yàn)證碼",Toast.LENGTH_SHORT).show();
   return;
  }else {
   Toast.makeText(this,"密碼修改成功",Toast.LENGTH_SHORT).show();
   Intent intent = new Intent();
   intent.putExtra("newpsw",newpsw);
   setResult(Activity.RESULT_OK,intent);
   finish();
  }
 }
 }
}

InfoWriteActivity

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class InfoWriteActivity extends AppCompatActivity implements View.OnClickListener {
 private static final String TAG = "huahua";
 private UserDBHelper mHelper;
 private EditText et_name;
 private EditText et_age;
 private EditText et_height;
 private EditText et_weight;
 private boolean Married = false;
 private String phone;
 private String password;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_shared_preferences);
 et_name = findViewById(R.id.et_name);
 et_age = findViewById(R.id.et_age);
 et_height = findViewById(R.id.et_height);
 et_weight = findViewById(R.id.et_weight);
 findViewById(R.id.btn_save).setOnClickListener(this);

 SharedPreferences sps = getSharedPreferences("Login",Context.MODE_PRIVATE);
 SharedPreferences.Editor editor = sps.edit();
 phone = sps.getString("phone","");
 password = sps.getString("password","");


 ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this, R.layout.item_dropdown, typeArray);
 typeAdapter.setDropDownViewResource(R.layout.item_dropdown);
 Spinner sp_married = findViewById(R.id.sp_married);
 sp_married.setAdapter(typeAdapter);
 sp_married.setPrompt("請(qǐng)選擇婚姻狀況");
 sp_married.setSelection(0);
 sp_married.setOnItemSelectedListener(new TypeSelectedListener());

 


 }

 private String[] typeArray = {"未婚", "已婚"};

 class TypeSelectedListener implements AdapterView.OnItemSelectedListener {
 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  Married = (arg2 == 0) ? false : true;
 }

 public void onNothingSelected(AdapterView<?> arg0) {
 }
 }

 @Override
 protected void onStart() {
 super.onStart();
 SQLiteDatabase mDB = getApplicationContext().openOrCreateDatabase("user.db", Context.MODE_PRIVATE, null);
 mHelper = UserDBHelper.getInstance(this, 1);
 mHelper.openWriteLink();
 }

 @Override
 protected void onStop() {
 super.onStop();
 mHelper.closeLink();
 }

 @Override
 public void onClick(View v) {
 if (v.getId() == R.id.btn_save) {
  String name = et_name.getText().toString();
  String age = et_age.getText().toString();
  String height = et_height.getText().toString();
  String weight = et_weight.getText().toString();
  if (name == null || name.length() <= 0) {
  showToast("請(qǐng)先填寫姓名");
  return;
  }
  if (age == null || age.length() <= 0) {
  showToast("請(qǐng)先填寫年齡");
  return;
  }
  if (height == null || height.length() <= 0) {
  showToast("請(qǐng)先填寫身高");
  return;
  }
  if (weight == null || weight.length() <= 0) {
  showToast("請(qǐng)先填寫體重");
  return;
  }

  UserInfo info = new UserInfo();

  info.name = name;
  info.age = Integer.parseInt(age);
  info.height = Long.parseLong(height);
  info.weight = Float.parseFloat(weight);
  info.married = Married;
  info.phone = phone;
  info.password = password;

  //info.update_time = DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss");
  info.update_time = DateUtil.getNowDate(DateUtil.DatePattern.ALL_TIME);
  Log.d(TAG, "onClick: 手機(jī)號(hào)" + info.phone+info.password+info.name+info.update_time+info.married);
  mHelper.insert(info);
  Intent intent = new Intent(InfoWriteActivity.this, InfoReadActivity.class);
  startActivity(intent);
  showToast("數(shù)據(jù)已寫入SQLite數(shù)據(jù)庫(kù)");
 }
 }

 private void showToast(String desc) {
 Toast.makeText(this, desc, Toast.LENGTH_SHORT).show();
 }

 public static void startHome(Context mContext) {
 Intent intent = new Intent(mContext, InfoWriteActivity.class);
 mContext.startActivity(intent);
 }
}

InfoReadActivity

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class InfoWriteActivity extends AppCompatActivity implements View.OnClickListener {
 private static final String TAG = "huahua";
 private UserDBHelper mHelper;
 private EditText et_name;
 private EditText et_age;
 private EditText et_height;
 private EditText et_weight;
 private boolean Married = false;
 private String phone;
 private String password;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_shared_preferences);
 et_name = findViewById(R.id.et_name);
 et_age = findViewById(R.id.et_age);
 et_height = findViewById(R.id.et_height);
 et_weight = findViewById(R.id.et_weight);
 findViewById(R.id.btn_save).setOnClickListener(this);

 SharedPreferences sps = getSharedPreferences("Login",Context.MODE_PRIVATE);
 SharedPreferences.Editor editor = sps.edit();
 phone = sps.getString("phone","");
 password = sps.getString("password","");


 ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this, R.layout.item_dropdown, typeArray);
 typeAdapter.setDropDownViewResource(R.layout.item_dropdown);
 Spinner sp_married = findViewById(R.id.sp_married);
 sp_married.setAdapter(typeAdapter);
 sp_married.setPrompt("請(qǐng)選擇婚姻狀況");
 sp_married.setSelection(0);
 sp_married.setOnItemSelectedListener(new TypeSelectedListener());
 }

 private String[] typeArray = {"未婚", "已婚"};

 class TypeSelectedListener implements AdapterView.OnItemSelectedListener {
 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  Married = (arg2 == 0) ? false : true;
 }

 public void onNothingSelected(AdapterView<?> arg0) {
 }
 }

 @Override
 protected void onStart() {
 super.onStart();
 SQLiteDatabase mDB = getApplicationContext().openOrCreateDatabase("user.db", Context.MODE_PRIVATE, null);
 mHelper = UserDBHelper.getInstance(this, 1);
 mHelper.openWriteLink();
 }

 @Override
 protected void onStop() {
 super.onStop();
 mHelper.closeLink();
 }

 @Override
 public void onClick(View v) {
 if (v.getId() == R.id.btn_save) {
  String name = et_name.getText().toString();
  String age = et_age.getText().toString();
  String height = et_height.getText().toString();
  String weight = et_weight.getText().toString();
  if (name == null || name.length() <= 0) {
  showToast("請(qǐng)先填寫姓名");
  return;
  }
  if (age == null || age.length() <= 0) {
  showToast("請(qǐng)先填寫年齡");
  return;
  }
  if (height == null || height.length() <= 0) {
  showToast("請(qǐng)先填寫身高");
  return;
  }
  if (weight == null || weight.length() <= 0) {
  showToast("請(qǐng)先填寫體重");
  return;
  }

  UserInfo info = new UserInfo();

  info.name = name;
  info.age = Integer.parseInt(age);
  info.height = Long.parseLong(height);
  info.weight = Float.parseFloat(weight);
  info.married = Married;
  info.phone = phone;
  info.password = password;

  info.update_time = DateUtil.getNowDate(DateUtil.DatePattern.ALL_TIME);
  Log.d(TAG, "onClick: 手機(jī)號(hào)" + info.phone+info.password+info.name+info.update_time+info.married);
  mHelper.insert(info);
  Intent intent = new Intent(InfoWriteActivity.this, InfoReadActivity.class);
  startActivity(intent);
  showToast("數(shù)據(jù)已寫入SQLite數(shù)據(jù)庫(kù)");
 }
 }

 private void showToast(String desc) {
 Toast.makeText(this, desc, Toast.LENGTH_SHORT).show();
 }

 public static void startHome(Context mContext) {
 Intent intent = new Intent(mContext, InfoWriteActivity.class);
 mContext.startActivity(intent);
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 九宮圖比較常用的多控件布局(GridView)使用介紹

    九宮圖比較常用的多控件布局(GridView)使用介紹

    GridView跟ListView都是比較常用的多控件布局,而GridView更是實(shí)現(xiàn)九宮圖的首選,下面與大家分享下GridView用法,感興趣的朋友可以參考下哈
    2013-06-06
  • android studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    android studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了android studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android登錄時(shí)密碼保護(hù)功能

    Android登錄時(shí)密碼保護(hù)功能

    這篇文章主要為大家詳細(xì)介紹了Android登錄時(shí)密碼保護(hù)功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 百度地圖實(shí)現(xiàn)小車規(guī)劃路線后平滑移動(dòng)功能

    百度地圖實(shí)現(xiàn)小車規(guī)劃路線后平滑移動(dòng)功能

    這篇文章主要介紹了百度地圖實(shí)現(xiàn)小車規(guī)劃路線后平滑移動(dòng)功能,本文是小編寫的一個(gè)demo,通過效果圖展示的非常直白,需要的朋友可以參考下
    2020-01-01
  • Android實(shí)現(xiàn)圓角圖片的方法

    Android實(shí)現(xiàn)圓角圖片的方法

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圓角圖片的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android實(shí)現(xiàn)音量調(diào)節(jié)的方法

    Android實(shí)現(xiàn)音量調(diào)節(jié)的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)音量調(diào)節(jié)的方法,涉及Android頁(yè)面布局及多媒體播放的設(shè)置技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android ZxingPlus精簡(jiǎn)的二維碼框架示例代碼

    Android ZxingPlus精簡(jiǎn)的二維碼框架示例代碼

    下面小編就為大家分享一篇Android ZxingPlus精簡(jiǎn)的二維碼框架示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 如何快速創(chuàng)建Android模擬器

    如何快速創(chuàng)建Android模擬器

    這篇文章主要為大家詳細(xì)介紹了快速創(chuàng)建Android模擬器的方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android音頻編輯之音頻合成功能

    Android音頻編輯之音頻合成功能

    這篇文章主要為大家詳細(xì)介紹了Android音頻編輯之音頻合成功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Kotlin設(shè)計(jì)模式之委托模式使用方法詳解

    Kotlin設(shè)計(jì)模式之委托模式使用方法詳解

    Kotlin提供了兩個(gè)本機(jī)功能來實(shí)現(xiàn)委托模式,第一個(gè)是接口委托(例如策略模式),另一種是屬性委托,它專注于類成員/屬性(例如延遲加載、observable等),它們共同提供了一組豐富而簡(jiǎn)潔的功能,通過本博客,您將了解在什么情況下使用此模式
    2023-09-09

最新評(píng)論