av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

基于SQLite的Android登錄APP

瀏覽:58日期: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
相關文章:
主站蜘蛛池模板: 国产草草| 制中文字幕音影 | 特黄一级视频 | 欧美啪啪网 | 日韩免费一区 | 免费av观看| 22精品一区二区三区 | 国产一区福利 | 欧美日韩精品 | 黄色大片av | 日韩久久久 | 成人免费精品 | 久久久青草 | 日本中文在线 | av影院在线| 欧美又大又硬又粗bbbbb | 一级黄毛片 | 成年人免费在线视频 | 窝窝午夜精品一区二区 | 日韩午夜av | 成人综合网站 | 日日夜夜狠狠干 | 色天堂视频 | 可以免费看的av | 欧美大片91 | 欧美日韩国产二区 | 一区二区美女 | 国产精品剧情 | 青青草在线免费视频 | 国产精品成人免费视频 | 国产激情在线观看 | 日韩国产一区二区 | 精品国产伦一区二区三区 | 国产无遮挡又黄又爽免费网站 | 色婷婷在线播放 | 深夜福利在线播放 | 最近日本中文字幕 | 欧美黄色一级视频 | 国产精品二区在线观看 | www.第四色 | 日本a v在线播放 |