黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

基于SQLite的Android登錄APP

瀏覽:71日期:2022-09-21 08:22:44

基于SQLite的Android登錄APP

該登錄APP主要包括三個模塊:

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

使用控件:

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

采用的存儲方式

1、共享參數SharedPreferences:

是Android的一個輕量級存儲工具,采用的存儲結構是Key-Value的鍵值對方式,類似于Java的Properties類,都是把Key-Value的鍵值對保存在配置文件中,不同的是Properties的文件內容是Key=Value的形式,而SharedPreferences的存儲介質是符合XML規范的配置文件。本案例中用于保存用戶的賬號和密碼。

2、數據庫SQLite:

是一個小巧的嵌入式數據庫。本案例中用于存儲用戶的個人信息。

成果展示:

基于SQLite的Android登錄APP

界面設計:

1. 登錄界面

基于SQLite的Android登錄APP

<?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: android:layout_width='match_parent' android:layout_height='wrap_content' android:orientation='horizontal' android:layout_marginTop='20dp'> <RadioButton android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='密碼登錄' android:textSize='25sp' /> <RadioButton android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='驗證碼登錄' android:layout_marginLeft='50dp' android:textSize='25sp' /> </RadioGroup> <TextView android: 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: 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: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_below='@+id/tv_shenfen' android:text='手機號碼:' android:textSize='25sp' android:textColor='@color/black' android:layout_marginTop='40dp'/> <EditText android: 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='請輸入手機號碼' android:inputType='number' /> <TextView android: 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: 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: android:layout_width='match_parent' android:layout_height='match_parent' android:hint='請輸入密碼' android:textSize='25sp' android:background='@drawable/eb_selector' /> <Button android: 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: 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: 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.忘記密碼界面

基于SQLite的Android登錄APP

<?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: 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: 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='請輸入新密碼' android:textSize='25sp' android:inputType='textPassword' /> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginTop='40dp' android:text='確認新密碼:' android:layout_below='@+id/tv_newpsw' android:textSize='25sp' android:textColor='@color/black'/> <EditText android: 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='請再次輸入新密碼' android:inputType='textPassword'/> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='驗證碼:' 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: android:layout_width='match_parent' android:layout_height='match_parent' android:textSize='25sp' android:hint='輸入驗證碼' android:inputType='number' android:background='@drawable/eb_selector' android:maxLines='1'/> <Button android: android:layout_width='wrap_content' android:layout_height='match_parent' android:layout_gravity='right' android:text='獲取驗證碼' android:textSize='25sp' android:padding='10dp' android:textColor='@color/black' android:background='@color/darkgray'/> </FrameLayout> <Button android: 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.個人信息填寫界面

基于SQLite的Android登錄APP

<?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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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.個人信息顯示界面

基于SQLite的Android登錄APP

<?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: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_below='@+id/btn_delete' android:textSize='25sp'/> <Button android: android:layout_width='match_parent' android:layout_height='wrap_content' android:text='刪除' android:textSize='25sp'/></RelativeLayout>代碼實現

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'; //數據庫名 private static final int DB_VERSION = 1; //數據庫版本 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: 打開了讀數據庫'); } 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: 創建數據庫'); 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+'數據庫新舊版本號'); 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: 當前版本號'+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); // 執行更新記錄動作,該語句返回記錄更新的數目 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: 驗證碼登錄'+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 = {'個人用戶','企業用戶'}; 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: 點擊了忘記密碼'); if (phone == null || phone.length() < 11) { Toast.makeText(this, '請輸入正確的手機號', Toast.LENGTH_SHORT).show(); return; } if (rb_psw.isChecked()) { Log.i(TAG, 'onClick: 進入忘記密碼界面'); 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: 發送驗證碼'); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle('請記住驗證碼!'); builder.setMessage('手機號' + phone + ',本次驗證碼是:' + mCheckCode + ',請輸入驗證碼'); builder.setPositiveButton('確定', null); AlertDialog alert = builder.create(); alert.show(); } } break; case R.id.btn_login: { if (phone == null || phone.length() < 11) { Toast.makeText(this, '請輸入正確的手機號!', Toast.LENGTH_SHORT).show(); Log.i(TAG, 'onClick: 驗證密碼'); return; } if (rb_psw.isChecked()) { if (!et_psw.getText().toString().equals(mPassword) || et_psw.getText().toString().equals('')) { Toast.makeText(this, '請輸入正確的密碼', Toast.LENGTH_SHORT).show(); return; } else { loginSuccess(); } } else if (rb_checkcode.isChecked()) { if (!et_psw.getText().toString().equals(mCheckCode)) { Toast.makeText(this, '請輸入正確的驗證碼', Toast.LENGTH_SHORT).show(); return; } else { loginSuccess(); } } } } } private void loginSuccess(){ String desc = String.format('您的手機號碼是%s,類型是%s。恭喜你通過登錄驗證,點擊“確定”按鈕返回上個頁面',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,'請輸入正確的手機號',Toast.LENGTH_SHORT).show(); return; } mCheckCode = String.format('%06d',(int)(Math.random()*1000000%1000000)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle('請記住驗證碼'); builder.setMessage('手機號'+mPhone+',本次驗證碼是'+mCheckCode+',請輸入驗證碼'); 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,'請輸入正確的新密碼',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,'請輸入正確的驗證碼',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('請選擇婚姻狀況'); 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('請先填寫姓名'); return; } if (age == null || age.length() <= 0) { showToast('請先填寫年齡'); return; } if (height == null || height.length() <= 0) { showToast('請先填寫身高'); return; } if (weight == null || weight.length() <= 0) { showToast('請先填寫體重'); 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: 手機號' + 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('數據已寫入SQLite數據庫'); } } 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('請選擇婚姻狀況'); 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('請先填寫姓名'); return; } if (age == null || age.length() <= 0) { showToast('請先填寫年齡'); return; } if (height == null || height.length() <= 0) { showToast('請先填寫身高'); return; } if (weight == null || weight.length() <= 0) { showToast('請先填寫體重'); 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: 手機號' + 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('數據已寫入SQLite數據庫'); } } 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); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 精射女上司| 女人被男人爽到呻吟的视频 | 88国产精品视频一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | 18深夜在线观看免费视频 | 成人欧美一区二区三区动漫 | 中文字幕在线观看线人 | 欧美xxxx黑人又粗又大 | 小嫩草张开腿让我爽了一夜 | 久久久www成人免费毛片 | 黄色a一片 | 亚洲国产天堂一区二区三区 | 久久久精品国产99久久精品麻追 | 欧美一区二区三区免费 | а√资源新版在线天堂 | 噜噜噜久久 | 中文字幕在线观看一区二区三区 | 国产a在亚洲线播放 | 一区二区三国产 | 婷婷色中文字幕 | k频道国产在线观看 | 久久亚洲一区二区三区成人国产 | 第九色区av天堂 | 久久激情小说 | 国产精品三级一区二区 | 色就是色欧美色图 | 免费观看理伦片在线播放 | 明日花绮罗576空乘在线播放 | 国内精品伊人久久久久av | 法国啄木系列成人av | 精品日韩中文字幕 | 99视频精品在线 | 成人av综合网| 手机在线免费av | 极品妇女扒开粉嫩小泬 | av噜噜色| 国产美女视频免费观看的软件 | 国内免费精品视频 | 性涩av| 女人爽得直叫免费视频 | 国内久久精品 | 小视频在线免费观看 | 嫩草一区二区三区 | 国产成人免费av | 欧美男人亚洲天堂 | 中文区中文字幕免费看 | 欧美日韩另类一区二区 | 亚洲精品日本 | 国产成人精品亚洲777人妖 | 美女网站免费黄 | 国产成网站18禁止久久影院 | 色久天| 夜夜揉揉日日人人 | 久久久在线 | 狠狠操很很干 | 国产香蕉视频在线 | 一级黄色性生活视频 | 亚洲精品丝袜一区二区三区 | 精品亚洲成a人在线观看 | 国产欧美成人 | 天天干天天谢 | 亚洲ww不卡免费在线 | 无码av中文一区二区三区桃花岛 | 日本少妇高潮喷水xxxxxxx | 一本色道婷婷久久欧美 | 18禁超污无遮挡无码免费游戏 | 日韩精品国产另类专区 | 成人拍拍拍 | 人妻 日韩 欧美 综合 制服 | 国产suv精品一区 | 加勒比色老久久综合网 | 香港黄a三级三级三级看三级 | 欧美国产日韩久久mv | 五月婷婷欧美 | 红桃av一区二区三区在线无码av | 日本亲子乱子伦xxxx60岁 | 亚洲精品久久久久一区二区三区 | 国产精品午夜无码体验区 | 成人污污视频在线观看 | 香蕉国产在线 | 日韩欧美一区二区三 | 亚洲人成色7777在线观看不卡 | 中文字幕无线码 | 日本白嫩少妇hdtube | 欧产日产国产精品精品 | 日本中文字幕第一页 | 国产精品av久久久久久麻豆网 | 朋友的姐姐2在线观看 | 日本特黄特色aaa大片免费 | 日本少妇高潮xxxxx另类 | 99久在线观看 | 久久一区二区三区四区 | 欧美日韩欧美 | 久久午夜激情 | 亚洲国产天堂久久综合 | а√天堂资源官网在线资源 | 国产三级精品三级在线 | 亚洲精品丝袜一区二区三区 | 国产精品自在在线午夜出白浆 | 97夜夜澡人人爽人人喊中国片 | 双性受爽到不停的喷水bl | 欧美理论在线观看 | av男女 | 久久国产柳州莫菁门 | 丝袜视频在线观看 | 成人天堂资源www在线 | 56av国产精品久久久久久久 | 国产精品豆花视频www | 日韩久| 日韩在线国产 | 欧美日韩一区精品 | 久久久精品国产99久久精品麻追 | 99久久精品费精品国产风间由美 | 日韩免费毛片 | 欧美成人午夜免费视在线看片 | 久久久精品人妻一区二区三区四 | 人人妻人人澡人人爽精品欧美 | 99国产精品自拍 | 日本一区二区三区在线观看 | 欧洲性开放大片 | 国产农村妇女aaaaa视频 | √天堂在线 | 真实的国产乱xxxx在线91 | av大全在线观看 | 特黄色毛片 | 久草网址| 黑人巨大videos亚洲娇小 | 欧美视频在线观看免费 | 日韩亚洲一区二区三区 | 久久人精品 | 少妇高潮惨叫久久久久电影69 | 午夜精品乱人伦小说区 | 国产又粗又猛又爽又黄的视频p站 | 亚洲黄网在线观看 | 99久久99久久久精品齐齐 | 亚洲最大成人综合网720p | 天堂另类网站 | 美腿丝袜高跟三级视频 | 秋霞午夜鲁丝一区二区老狼 | 午夜精品久久久久久久 | 亚洲青草| 精品国产乱 | 久久888| 久久国产精品99久久久久久进口 | 欧美人与性囗牲恔配 | 亚洲成年人专区 | 日本特黄一级片 | 毛片一级免费 | 亚洲欧洲日产国码久在线 | 攵女h高h1v1深与浅 | 亚洲精品第三页 | 天天爽夜夜爽精品视频婷婷 | 亚洲国产综合精品2020 | 欧美视频在线观看免费 | 毛片网站在线看 | 波多野结衣亚洲视频 | 久久久精品2019免费观看 | 老司机免费在线视频 | 久久久久久综合 | 乱淫av| 狠狠躁夜夜躁人人躁婷婷视频 | 久久国产乱子伦免费精品 | 国产一区二区三区四区五区密私 | 青青草伊人网 | 日韩国产一区二区三区四区 | 日本不卡视频在线播放 | 国产精品美女久久久久久久久 | 天堂综合网久久 | 荒岛淫众女h文小说 | 2024国产精品视频 | 亚洲三级国产 | 好爽好大久久久级淫片毛片小说 | 国产一区二区三区在线视频 | 少妇淫片 | 亚洲欧洲无码av不卡在线 | 麻豆精品| 午夜免费福利小视频 | 日本三级带日本三级带66 | 国产97免费视频 | 嫩草影院在线观看视频 | 北条麻妃一区二区三区av高清 | 国自产拍偷拍精品啪啪模特 | 成人做受黄大片 | 精品欧美一区二区三区 | 欧美日韩少妇精品 | 国产裸体视频bbbbb | 欧洲成人一区 | 在线观看欧美 | 91噜噜噜 | 性少妇mdms丰满hdfilm | 91在线观看 | 91精品综合久久久久久 | 美女内射毛片在线看免费人动物 | 久久综合狠狠综合久久综合88 | 中文字幕女同女同女同 | 亚洲视频一 | 一区二区三区无码高清视频 | 人人草人人澡 | 国产精品18久久久久vr使用方法 | 亚洲一区二区三区无码久久 | 亚洲国产综合一区 | 91福利视频网站 | 嘿嘿射在线 | 久久国产精品久久久久久久久久 | 91视频二区| 欧美美女在线观看 | 爱情岛论坛成人永久网站在线观看 | 美女内射毛片在线看免费人动物 | 欧美激情精品久久久久久蜜臀 | 色爽爽爽爽爽爽爽爽 | 一级全黄裸体免费观看视频 | 亚洲午夜视频在线观看 | 日本韩国毛片 | 国产又粗又猛又黄又爽视频 | 久久在线中文字幕 | 日本波多野结衣在线 | 精品人妻伦一二三区久久 | 波多野结衣精品视频 | 荡女精品导航 | 成人在线免费看 | 91精品久久久久久综合五月天 | 手机免费在线观看av | 丰满少妇一区二区三区 | 视频日韩 | 又爽又色禁片1000视频免费看 | 国产成人精品亚洲线观看 | 亚洲精品一区二三区不卡 | 日韩在线影院 | 天堂欧美城网站 | 日皮毛片| 日韩精品一区二区av在线 | 欧美成人免费在线观看 | 国产美a三级三级看三级 | 探花系列在线观看 | 中文字幕有码无码人妻av蜜桃 | 日日摸夜夜添狠狠添久久精品成人 | 中文字幕第1页第69 中文字幕第22页 | 国产人成在线视频 | 国产男男无套激情11069 | 中文字幕_第2页_高清免费在线 | 亚洲作爱网 | 国产在线午夜卡精品影院 | 欧美日韩精品中文字幕 | 欧美中日韩免费观看网站 | 亚洲精品av羞羞禁网站 | 狠狠色成人综合 | 国产九一精品 | 一级久久久久久久 | 久久久久亚洲ai毛片换脸星大全 | 97精品国产手机 | 少妇被爽到高潮喷水久久欧美精品 | 亚洲精品美女久久7777777 | 日本韩国欧美一区二区三区 | 美女裸体视频永久免费 | 国产成人免费在线 | 国产免费拔擦拔擦8x软件大全 | 理论在线视频 | 99精品全国免费观看视频 | 久久精品aⅴ无码中文字字幕重口 | 久久精品视频亚洲 | 8x福利精品第一导航 | 日韩欧美国产另类 | 三级全黄做爰龚玥菲在线 | 无码人妻精品一区二区在线视频 | 无码精品久久久久久人妻中字 | 91精品视频在线 | 黑人蹂躏少妇在线播放 | 天天精品免费视频 | 国产又色又爽无遮挡免费动态图 | 日本欧美在线播放 | 日本肉体xxxx裸体xxx免费 | 久久的久久爽亚洲精品aⅴ 久久第一页 | 青青青爽视频在线观看 | 日韩一区二区三区精品视频 | 久久综合伊人77777麻豆 | 色一情一乱一乱一区99av白浆 | 中文激情网 | 亚洲欧美午夜 | 国产又黄又大又粗视频 | 国产成人亚洲精品 | 女女同性女同一区二区三区九色 | 国产一区二区 | 这里都是精品 | 久久久久久一 | 亚洲国产福利成人一区二区 | 免费全部高h视频 | 黄色a级片在线观看 | 欧洲亚洲激情 | 中国女人内谢69xxxx免费视频 | 亚洲中文字幕在线无码一区二区 | 亚洲人成网站在线播放2019 | 亚洲桃花综合 | 久久综合亚洲色一区二区三区 | 在线不卡一区 | bbbbbbbbb毛片大片按摩 | 国产欧美激情日韩成人三区 | 97人人模人人爽人人少妇 | 国产又粗又猛又爽又黄的免费视频 | 日本嫩草影院 | 欧洲无线码一二三四区 | 亚洲日韩aⅴ在线视频 | 国产一级揄自揄精品视频 | 三级视频网站 | 亚洲人成网站在线在线观看 | 久久极品 | 黄网在线播放 | 麻豆成人久久精品二区三区免费 | 欧美韩一区二区三区 | 99国产精品自拍 | 亚洲精品国产精品乱码不卡√香蕉 | 欧美一区二区三区成人 | 韩国明星乱淫(高h)小说 | 婷婷午夜 | 老头与老头性ⅹxx视频 | 亚洲 欧美 国产 制服 动漫 | 亚洲综合国产成人丁香五月激情 | 黑人边吃奶边摸边做边爱 | 国产伦精品免编号公布 | 久操视频免费观看 | 午夜天堂一区人妻 | 奇米影视亚洲精品一区 | 日本理论中文字幕 | 中文字幕亚洲精品在线 | 无码av大香线蕉 | 波多在线播放 | 国产在线观看成人 | 一本一道久久a久久精品蜜桃 | 男女又爽又黄视频 | 国产区在线观看视频 | 欧美日本三级少妇三级久久 | 黑人精品xxx一区一二区 | 日本精品视频在线观看 | 久久涩涩 | 国产高清av | 亚洲va在线va天堂xxxx中文 | av中文在线观看 | 国产香蕉av | 日日噜噜噜噜人人爽日本精品 | 国产a级网站 | 亚洲国产成人005 | 天天爱天天做天天爽 | 亚洲码欧美码一区二区三区 | 久久精品黄色 | 亚洲精品毛片一区二区三区 | 午夜日韩视频 | 欧美牲交a欧美牲交aⅴ免费下载 | 色婷婷亚洲一区二区三区 | 一级片在线播放 | 国产精品视频一区二区三区不卡 | 绿帽在线| 成人在线免费小视频 | 欧美日产国产精品 | 日韩精品一区二区三区在线视频 | 国产999精品久久久影片官网 | 亚洲精品免费播放 | 无码人妻一区二区三区在线视频 | 久久成年人视频 | 国色天香久久久久久久小说 | 国产成人av免费观看 | 国产精品自在线拍国产 | 亚洲第九十七页 | 日本成本人片免费网站 | 午夜免费看 | 成人精品在线视频 | 少妇在线观看 | 越南少妇做受xxx片 越南性xxxx精品hd | 乱人伦人妻中文字幕无码 | 国产精品理人伦一区二区三区 | 竹菊影视欧美日韩一区二区三区四区五区 | 中国黄色小视频 | 337p亚洲欧洲色噜噜噜 | 久久久久久天堂 | 午夜av导航| 久久午夜激情 | 欧美性www| 丁香啪啪综合成人亚洲小说 | 小sao货水好多真紧h视频, | 小sao货水好多真紧h国产 | 男女啪啪做爰高潮免费网站 | 久久午夜夜伦鲁鲁片不卡 | 日韩在线影院 | 岛国片人妻三上悠亚 | 97视频免费看 | 亚洲精品资源 | 六姐妹在线观看免费 | 在线观看日本视频 | 免费看黄色的网址 | 欧美性开放视频 | 国产一区二区三区免费看 | 草草免费视频 | 四虎免费观看 | 久久成人精品视频 | 国产真实伦对白全集 | www.日本高清| 亚洲精品资源 | 国产精品白嫩极品美女 | 奇米狠狠操 | 中文字幕色偷偷人妻久久 | 99久久婷婷国产综合精品青牛牛 | 欧美日韩精品区别 | 伊人精品无码av一区二区三区 | 国产欧美一区二区三区在线 | 91最新在线视频 | 91精品国产综合久久久蜜臀图片 | 一区二区三区视频免费看 | 日本 在线 | 2020精品国产自在现线看 | 免费激情视频网站 | 色爱综合另类图片av | 一本色道av立川理惠 | 亚洲精品日韩综合观看成人91 | 久久精品一 | 国产精品久久久久久久久果冻传媒 | 涩涩涩涩涩涩涩涩涩涩 | 欧美色综合色 | 在线观看一区二区三区视频 | 欧美婷婷六月丁香综合色 | 国产精品99久久不卡 | 最新日韩视频 | 欧美裸体性生活 | 亚洲男人第一无码av网站 | 国产a三级久久精品 | 好看的黄色网址 | 亚洲性网址 | 浪潮av激情高潮国产精品香港 | 日本一级淫片免费放 | 91一区二区三区四区 | 久久www免费人成人片 | 人人爽视频 | 欧美大荫蒂xxx| 97精品久久 | 欧美日韩中文在线 | 亚洲玉足av久久影视 | 亚洲欧美国产免费综合视频 | 久久综合婷婷 | 狠狠色丁香婷婷久久综合考虑 | 亚洲国产精品福利片在线观看 | 深夜国产在线 | 久久精品国产色蜜蜜麻豆 | 胖女人毛片| 韩国中文三级hd字幕 | 日韩福利在线 | 精品免费国产一区二区三区四区 | 国产又大又粗又猛又爽的视频 | 中文文字幕一区二区三三 | 少妇吹潮 | 欧美成人午夜剧场 | avtt国产| 亚洲国产麻豆 | 国产黄色片在线免费观看 | 主播叶子户外勾搭啪啪大 | 麻豆人妻少妇精品无码专区 | 色婷婷久久久久swag精品 | 国产熟妇久久777777 | 亚洲精品成人无码中文毛片 | 国产精品一区二区久久久 | 久久久国产成人一区二区三区 | 亚洲精品一区二区久 | 男人天堂a在线 | 国产嫩草在线 | 97操碰| 亚洲成人免费 | 春意影院福利社 | 亚洲女同av | 国产一级18片视频 | 天堂网2021最新天堂手机版 | 99热麻豆| 国产精品视频一区二区三区 | 欧美日韩在线综合 | www成人精品免费网站青椒 | 国产黄色片免费看 | 色综合激情网 | 操比视频网站 | 成人h视频在线观看 | 亚洲乱码视频在线观看 | 亚洲第一se情网站 | 各种含道具高h调教1v1男男 | 色先锋资源久久综合5566 | 欧美人做人爱a全程免费 | 国产免费啪啪 | 成年人小视频在线观看 | 在线观看吃瓜av网站 | 任你躁久久久久久妇女av | 日日夜夜噜噜噜 | 69久久99精品久久久久婷婷 | 日本人xxxxxxxxx泡妞 | 日产精品久久久久久久蜜臀 | 欧洲精品一卡2卡三卡4卡影视 | 性色av免费观看 | 人妻在厨房被色诱 中文字幕 | 亚洲国产aⅴ成人精品无吗 欧洲熟妇色xxxx欧美老妇多毛网站 | 成熟女人特级毛片www免费 | 99色图| 国产亚洲一卡2卡3卡4卡网站 | 日韩欧美大片在线观看 | 深夜视频在线免费观看 | 国产精品第8页 | 亚洲欧美一区二区三区孕妇 | 国产精品69久久久 | 国产一级片自拍 | 国产欧美一区二区精品性色超碰 | 黄色你懂的 | 日本精品久久久久久久 | 日本天天色 | 夜夜嗨国产 | 9久9久9久女女女九九九一九 | 三级毛片子 | 性欧美xxx内谢 | 亚洲国产成人精品女人久久久 | 九九热在线视频免费观看 | 欧美激情亚洲激情 | 在线精品视频一区二区三四 | 极品尤物一区二区 | 国产精品视频 | 婷婷精品久久久久久久久久不卡 | 日日摸日日踫夜夜爽无码 | 美腿丝袜亚洲色图 | 蜜臀av在线播放一区二区三区 | 91看片网| 一级片成人 | 国产无遮挡猛进猛出免费软件 | 精品久久久久久亚洲中文字幕 | 国产亚洲精品久久久久久大师 | 国产成a人亚洲精v品无码性色 | 亚洲第一页综合 | 岛国精品在线观看 | 新x8x8拨牐拨牐永久免费影库 | 周冬雨三级视频 | 91精品情国产情侣高潮对白文档 | 韩国av在线免费观看 | 欧美人与禽猛交乱配视频 | 66av欧美| a网站在线观看 | 久久久久久高潮国产精品视 | 日韩五月天| 91绿帽黑人系列一区 | julia一区二区在线播放 | 亚洲第一综合网站 | 黄视频在线播放 | brazzers欧美极品少妇 | 出轨人妻毛片一级 | www.激情五月 | 中文无码久久精品 | 精品视频一二区 | 亚洲一区波多野结衣在线app | 在线观看的av网站 | 欧洲-级毛片内射 | 亚色视频在线 | 国产精品96久久久久久久 | 免费看欧美大片 | 欧美日韩资源 | 偷看农村女人做爰毛片色 | 性久久久久久久久久久 | 怡红院最新网址 | 国产aⅴ超薄肉色丝袜交足 国产aⅴ精品 | 近伦中文字幕 | 久久狠狠高潮亚洲精品 | 337p色噜噜| 91成人精品一区在线播放 | 日韩精品视频观看 | 精品少妇人妻av一区二区三区 | 五月天堂av91久久久 | 欧美成人xxxx| 污视频网站免费在线观看 | 女人18片毛片60分钟 | 亚洲日本va中文字幕 | xoxo国产三区精品欧美 | 欧美黑人性暴力猛交喷水黑人巨大 | 免费福利视频在线观看 | 国产大陆亚洲精品国产 | 中文字幕人成人乱码亚洲电影 | 日本高清视频网站 | 五月丁香六月激情综合在线视频 | 日韩精品二区在线观看 | 一本久久伊人热热精品中文字幕 | 92看片淫黄大片看国产片 | 2022国产成人精品视频人 | 亚洲午夜精品a片久久www慈禧 | 三上悠亚日韩精品二区 | 国产精品丝袜www爽爽爽 | 亚洲调教| 美女的尿囗网站免费 | 欧美3p两根一起进高清免费视频 | 国产乱淫av片免费观看 | 午夜精品久久久久久久久久久久久蜜桃 | 亚洲区一区二区三区 | 男女性色大片免费网站 | 久草免费福利 | 日本精品在线播放 | 国产av寂寞骚妇 | 青在线视频 | 久久性av| 国产成人免费片在线观看 | 亚欧日韩在线 | 久久综合视频网 | 午夜免费在线 | 91丨九色丨蝌蚪丨老版 | 窝窝午夜色视频国产精品破 | 精品视频一二三区 | 国产视频一区二区三区在线观看 | 色久影院 | 精品一区二区三区av | 青娱乐自拍视频 | 亚洲成人777 | 黄色无毒视频 | 精品久久久久久 | 九九在线中文字幕无码 | 精品成人乱色一区二区 | 91快色| 免费又黄又爽又猛的毛片 | 爽爽精品dvd蜜桃成熟时电影院 | 一区二区中文字幕 | 久久久久国产精品www | 国内精品伊人久久久久7777 | 久久久精品在线观看 |