版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中怎么使用SQLite實(shí)現(xiàn)記住密碼功能
這期內(nèi)容當(dāng)中在下將會(huì)給大家?guī)碛嘘P(guān)Android中怎么使用SQLite實(shí)現(xiàn)記住密碼功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。具體內(nèi)容如下package
com.example.alimjan.hello_world;
import
com.example.alimjan.hello_world.bean.UserInfo;
import
com.example.alimjan.hello_world.dataBase.UserDBHelper;
import
com.example.alimjan.hello_world.Utils.DateUtil;
import
android.app.AlertDialog;
import
android.content.Context;
import
android.content.DialogInterface;
import
android.content.Intent;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.text.Editable;
import
android.text.TextWatcher;
import
android.util.Log;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.View.OnFocusChangeListener;
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.TextView;
import
android.widget.Toast;
import
android.widget.AdapterView.OnItemSelectedListener;
public
class
class_4_2_3
extends
AppCompatActivity
implements
OnClickListener,
OnFocusChangeListener
{
private
RadioGroup
rg_login;
private
RadioButton
rb_password;
private
RadioButton
rb_verifycode;
private
EditText
et_phone;
private
TextView
tv_password;
private
EditText
et_password;
private
Button
btn_forget;
private
CheckBox
ck_remember;
private
Button
btn_login;
private
int
mRequestCode
=
0;
private
int
mType
=
0;
private
boolean
bRemember
=
false;
private
String
mPassword
=
"111111";
private
String
mVerifyCode;
private
UserDBHelper
mHelper;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.code_4_2_3);
rg_login
=
(RadioGroup)
findViewById(R.id.rg_login);
rb_password
=
(RadioButton)
findViewById(R.id.rb_password);
rb_verifycode
=
(RadioButton)
findViewById(R.id.rb_verifycode);
et_phone
=
(EditText)
findViewById(R.id.et_phone);
tv_password
=
(TextView)
findViewById(R.id.tv_password);
et_password
=
(EditText)
findViewById(R.id.et_password);
btn_forget
=
(Button)
findViewById(R.id.btn_forget);
ck_remember
=
(CheckBox)
findViewById(R.id.ck_remember);
btn_login
=
(Button)
findViewById(R.id.btn_login);
rg_login.setOnCheckedChangeListener(new
RadioListener());
ck_remember.setOnCheckedChangeListener(new
CheckListener());
et_phone.addTextChangedListener(new
HideTextWatcher(et_phone));
et_password.addTextChangedListener(new
HideTextWatcher(et_password));
btn_forget.setOnClickListener(this);
btn_login.setOnClickListener(this);
et_password.setOnFocusChangeListener(this);
ArrayAdapter<String>
typeAdapter
=
new
ArrayAdapter<String>(this,
R.layout.item_select,
typeArray);
typeAdapter.setDropDownViewResource(R.layout.item_dropdown);
Spinner
sp_type
=
(Spinner)
findViewById(R.id.sp_type);
sp_type.setPrompt("請(qǐng)選擇用戶類型");
sp_type.setAdapter(typeAdapter);
sp_type.setSelection(mType);
sp_type.setOnItemSelectedListener(new
TypeSelectedListener());
}
private
class
RadioListener
implements
RadioGroup.OnCheckedChangeListener
{
@Override
public
void
onCheckedChanged(RadioGroup
group,
int
checkedId)
{
if
(checkedId
==
R.id.rb_password)
{
tv_password.setText("登錄密碼:");
et_password.setHint("請(qǐng)輸入密碼");
btn_forget.setText("忘記密碼");
ck_remember.setVisibility(View.VISIBLE);
}
else
if
(checkedId
==
R.id.rb_verifycode)
{
tv_password.setText("驗(yàn)證碼:");
et_password.setHint("請(qǐng)輸入驗(yàn)證碼");
btn_forget.setText("獲取驗(yàn)證碼");
ck_remember.setVisibility(View.INVISIBLE);
}
}
}
private
String[]
typeArray
=
{"個(gè)人用戶",
"公司用戶"};
class
TypeSelectedListener
implements
OnItemSelectedListener
{
public
void
onItemSelected(AdapterView<?>
arg0,
View
arg1,
int
arg2,
long
arg3)
{
mType
=
arg2;
}
public
void
onNothingSelected(AdapterView<?>
arg0)
{
}
}
private
class
CheckListener
implements
CompoundButton.OnCheckedChangeListener
{
@Override
public
void
onCheckedChanged(CompoundButton
buttonView,
boolean
isChecked)
{
if
(buttonView.getId()
==
R.id.ck_remember)
{
bRemember
=
isChecked;
}
}
}
private
class
HideTextWatcher
implements
TextWatcher
{
private
EditText
mView;
private
int
mMaxLength;
private
CharSequence
mStr;
public
HideTextWatcher(EditText
v)
{
super();
mView
=
v;
mMaxLength
=
ViewUtil.getMaxLength(v);
}
@Override
public
void
beforeTextChanged(CharSequence
s,
int
start,
int
count,
int
after)
{
}
@Override
public
void
onTextChanged(CharSequence
s,
int
start,
int
before,
int
count)
{
mStr
=
s;
}
@Override
public
void
afterTextChanged(Editable
s)
{
if
(mStr
==
null
||
mStr.length()
==
0)
return;
if
((mStr.length()
==
11
&&
mMaxLength
==
11)
||
(mStr.length()
==
6
&&
mMaxLength
==
6))
{
ViewUtil.hideOneInputMethod(class_4_2_3.this,
mView);
}
}
}
@Override
public
void
onClick(View
v)
{
String
phone
=
et_phone.getText().toString();
if
(v.getId()
==
R.id.btn_forget)
{
if
(phone==null
||
phone.length()<11)
{
Toast.makeText(this,
"請(qǐng)輸入正確的手機(jī)號(hào)",
Toast.LENGTH_SHORT).show();
return;
}
if
(rb_password.isChecked()
==
true)
{
Intent
intent
=
new
Intent(this,
class_4_2_3_1.class);
intent.putExtra("phone",
phone);
startActivityForResult(intent,
mRequestCode);
}
else
if
(rb_verifycode.isChecked()
==
true)
{
mVerifyCode
=
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)"+phone+",本次驗(yàn)證碼是"+mVerifyCode+",請(qǐng)輸入驗(yàn)證碼");
builder.setPositiveButton("好的",
null);
AlertDialog
alert
=
builder.create();
alert.show();
}
}
else
if
(v.getId()
==
R.id.btn_login)
{
if
(phone==null
||
phone.length()<11)
{
Toast.makeText(this,
"請(qǐng)輸入正確的手機(jī)號(hào)",
Toast.LENGTH_SHORT).show();
return;
}
if
(rb_password.isChecked()
==
true)
{
if
(et_password.getText().toString().equals(mPassword)
!=
true)
{
Toast.makeText(this,
"請(qǐng)輸入正確的密碼",
Toast.LENGTH_SHORT).show();
return;
}
else
{
loginSuccess();
}
}
else
if
(rb_verifycode.isChecked()
==
true)
{
if
(et_password.getText().toString().equals(mVerifyCode)
!=
true)
{
Toast.makeText(this,
"請(qǐng)輸入正確的驗(yàn)證碼",
Toast.LENGTH_SHORT).show();
return;
}
else
{
loginSuccess();
}
}
}
}
@Override
protected
void
onActivityResult(int
requestCode,
int
resultCode,
Intent
data)
{
if
(requestCode
==
mRequestCode
&&
data!=null)
{
//用戶密碼已改為新密碼
mPassword
=
data.getStringExtra("new_password");
}
}
//從修改密碼頁面返回登錄頁面,要清空密碼的輸入框
@Override
protected
void
onRestart()
{
et_password.setText("");
super.onRestart();
}
@Override
protected
void
onResume()
{
super.onResume();
mHelper
=
UserDBHelper.getInstance(this,
2);
mHelper.openWriteLink();
}
@Override
protected
void
onPause()
{
super.onPause();
mHelper.closeLink();
}
private
void
loginSuccess()
{
String
desc
=
String.format("您的手機(jī)號(hào)碼是%s,類型是%s。恭喜你通過登錄驗(yàn)證,點(diǎn)擊“確定”按鈕返回上個(gè)頁面",
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)
{
finish();
}
});
builder.setNegativeButton("我再看看",
null);
AlertDialog
alert
=
builder.create();
alert.show();
if
(bRemember)
{
UserInfo
info
=
new
UserInfo();
info.phone
=
et_phone.getText().toString();
info.password
=
et_password.getText().toString();
info.update_time
=
DateUtil.getCurDateStr("yyyy-MM-dd
HH:mm:ss");
mHelper.insert(info);
}
}
//為什么光標(biāo)進(jìn)入密碼框事件不選onClick?因?yàn)橐c(diǎn)兩下才會(huì)觸發(fā)onClick動(dòng)作(第一下是切換焦點(diǎn)動(dòng)作)
@Override
public
void
onFocusChange(View
v,
boolean
hasFocus)
{
String
phone
=
et_phone.getText().toString();
if
(v.getId()
==
R.id.et_password)
{
if
(phone.length()
>
0
&&
hasFocus
==
true)
{
UserInfo
info
=
mHelper.queryByPhone(phone);
if
(info
!=
null)
{
et_password.setText(info.password);
}else{
et_password.setText("");
}
}
}
}
public
static
void
startHome(Context
mContext)
{
Intent
intent
=
new
Intent(mContext,
class_4_2_3.class);
mContext.startActivity(intent);
}
}<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="5dp"
>
<RadioGroup
android:id="@+id/rg_login"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/rb_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:checked="true"
android:gravity="left|center"
android:text="密碼登錄"
android:textColor="@color/black"
android:textSize="17sp"
/>
<RadioButton
android:id="@+id/rb_verifycode"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:checked="false"
android:gravity="left|center"
android:text="驗(yàn)證碼登錄"
android:textColor="@color/black"
android:textSize="17sp"
/>
</RadioGroup>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<TextView
android:id="@+id/tv_type"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:text="我是:"
android:textColor="@color/black"
android:textSize="17sp"
/>
<Spinner
android:id="@+id/sp_type"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/tv_type"
android:gravity="left|center"
android:spinnerMode="dialog"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:text="手機(jī)號(hào)碼:"
android:textColor="@color/black"
android:textSize="17sp"
/>
<EditText
android:id="@+id/et_phone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/tv_phone"
android:background="@drawable/editext_selector"
android:gravity="left|center"
android:hint="請(qǐng)輸入手機(jī)號(hào)碼"
android:inputType="number"
android:maxLength="11"
android:textColor="@color/black"
android:textColorHint="@color/grey"
android:textCursorDrawable="@drawable/text_cursor"
android:textSize="17sp"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<TextView
android:id="@+id/tv_password"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:text="登錄密碼:"
android:textColor="@color/black"
android:textSize="17sp"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/tv_password"
>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:background="@drawable/editext_selector"
android:gravity="left|center"
android:hint="請(qǐng)輸入密碼"
android:inputType="numberPassword"
android:maxLength="6"
android:textColor="@color/black"
android:textColorHint="@color/grey"
android:textCursorDrawable="@drawable/text_cursor"
android:textSize="17sp"
/>
<Button
android:id="@+id/btn_forget"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:gravity="center"
android:text="忘記密碼"
android:textColor="@color/black"
android:textSize="17sp"
/>
</FrameLayout>
</RelativeLayout>
<CheckBox
android:id="@+id/ck_remember"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:button="@drawable/checkbox_selector"
android:checked="false"
android:padding="10dp"
android:text="記住密碼"
android:textColor="@color/black"
android:textSize="17sp"
/>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登錄"
android:textColor="@color/black"
android:textSize="22sp"
/>
</LinearLayout>package
com.example.alimjan.hello_world;
/**
*
Created
by
alimjan
on
7/4/2017.
*/
import
android.app.Activity;
import
android.app.AlertDialog;
import
android.content.Context;
import
android.content.Intent;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.EditText;
import
android.widget.Toast;
public
class
class_4_2_3_1
extends
AppCompatActivity
implements
OnClickListener
{
private
EditText
et_password_first;
private
EditText
et_password_second;
private
EditText
et_verifycode;
private
String
mVerifyCode;
private
String
mPhone;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.code_4_2_3_1);
et_password_first
=
(EditText)
findViewById(R.id.et_password_first);
et_password_second
=
(EditText)
findViewById(R.id.et_password_second);
et_verifycode
=
(EditText)
findViewById(R.id.et_verifycode);
findViewById(R.id.btn_verifycode).setOnClickListener(this);
findViewById(R.id.btn_confirm).setOnClickListener(this);
mPhone
=
getIntent().getStringExtra("phone");
}
@Override
public
void
onClick(View
v)
{
if
(v.getId()
==
R.id.btn_verifycode)
{
if
(mPhone==null
||
mPhone.length()<11)
{
Toast.makeText(this,
"請(qǐng)輸入正確的手機(jī)號(hào)",
Toast.LENGTH_SHORT).show();
return;
}
mVerifyCode
=
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)證碼是"+mVerifyCode+",請(qǐng)輸入驗(yàn)證碼");
builder.setPositiveButton("好的",
null);
AlertDialog
alert
=
builder.create();
alert.show();
}
else
if
(v.getId()
==
R.id.btn_confirm)
{
String
password_first
=
et_password_first.getText().toString();
String
password_second
=
et_password_second.getText().toString();
if
(password_first==null
||
password_first.length()<6
||
password_second==null
||
password_second.length()<6)
{
Toast.makeText(this,
"請(qǐng)輸入正確的新密碼",
Toast.LENGTH_SHORT).show();
return;
}
if
(password_first.equals(password_second)
!=
true)
{
Toast.makeText(this,
"兩次輸入的新密碼不一致",
Toast.LENGTH_SHORT).show();
return;
}
if
(et_verifycode.getText().toString().equals(mVerifyCode)
!=
true)
{
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("new_password",
password_first);
setResult(Activity.RESULT_OK,
intent);
finish();
}
}
}
public
static
void
startHome(Context
mContext)
{
Intent
intent
=
new
Intent(mContext,
class_4_2_3_1.class);
mContext.startActivity(intent);
}
}<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="5dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<TextView
android:id="@+id/tv_password_first"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:text="輸入新密碼:"
android:textColor="@color/black"
android:textSize="17sp"
/>
<EditText
android:id="@+id/et_password_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/tv_password_first"
android:background="@drawable/editext_selector"
android:gravity="left|center"
android:hint="請(qǐng)輸入新密碼"
android:inputType="numberPassword"
android:maxLength="11"
android:textColor="@color/black"
android:textColorHint="@color/grey"
android:textCursorDrawable="@drawable/text_cursor"
android:textSize="17sp"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<TextView
android:id="@+id/tv_password_second"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:text="確認(rèn)新密碼:"
android:textColor="@color/black"
android:textSize="17sp"
/>
<EditText
android:id="@+id/et_password_second"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/tv_password_sec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市政橋梁檢測(cè)合同模板
- 鹵菜設(shè)備出售合同范例
- 房地產(chǎn)代理交易合同范例
- 定制高端家具交易合同范例
- 小區(qū)地面防護(hù)合同范例
- 養(yǎng)老管家合同范例
- 房產(chǎn)抵押延期合同范例
- 2024年呼和浩特客運(yùn)從業(yè)資格證考試題庫(kù)模擬考試答案
- 2024年青海客運(yùn)資格證培訓(xùn)考試題答案詳解
- 2024年江蘇道路客運(yùn)輸從業(yè)資格證考試培訓(xùn)試題和答案
- 課件:《中華民族共同體概論》第十六講 文明新路與人類命運(yùn)共同體
- 教科版五年級(jí)科學(xué)上冊(cè)全冊(cè)學(xué)案、學(xué)習(xí)任務(wù)單【全冊(cè)】
- 2024年秋八年級(jí)歷史上冊(cè) 第13課 五四運(yùn)動(dòng)教案 新人教版
- 物業(yè)管理退場(chǎng)通知書(模板)
- 專業(yè)學(xué)位碩士研究生英語智慧樹知到答案2024年黑龍江中醫(yī)藥大學(xué)
- 國(guó)家職業(yè)大典
- 《電力系統(tǒng)繼電保護(hù)》課程標(biāo)準(zhǔn)(含課程思政)
- 節(jié)能驗(yàn)收?qǐng)?bào)告模板(參考固定資產(chǎn)投資項(xiàng)目節(jié)能審查系列工作指南2018年本)
- JGJT397-2016 公墓和骨灰寄存建筑設(shè)計(jì)規(guī)范
- 食品代加工合同書
- 2024商業(yè)承兌匯票質(zhì)押協(xié)議書
評(píng)論
0/150
提交評(píng)論