Android开发笔记SQLite优化记住密码功能

本文实例为大家分享了Android SQLite优化记住密码功能的具体代码,供大家参考,具体内容如下

package com.example.alimjan.hello_world;

/**
 * Created by alimjan on 7/4/2017.
 */

  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("请选择用户类型");
  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("请输入密码");
    btn_forget.setText("忘记密码");
    ck_remember.setVisibility(View.VISIBLE);
   } else if (checkedId == R.id.rb_verifycode) {
    tv_password.setText(" 验证码:");
    et_password.setHint("请输入验证码");
    btn_forget.setText("获取验证码");
    ck_remember.setVisibility(View.INVISIBLE);
   }
  }
 }

 private String[] typeArray = {"个人用户", "公司用户"};
 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, "请输入正确的手机号", 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("请记住验证码");
    builder.setMessage("手机号"+phone+",本次验证码是"+mVerifyCode+",请输入验证码");
    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, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
    return;
   }
   if (rb_password.isChecked() == true) {
    if (et_password.getText().toString().equals(mPassword) != true) {
     Toast.makeText(this, "请输入正确的密码", Toast.LENGTH_SHORT).show();
     return;
    } else {
     loginSuccess();
    }
   } else if (rb_verifycode.isChecked() == true) {
    if (et_password.getText().toString().equals(mVerifyCode) != true) {
     Toast.makeText(this, "请输入正确的验证码", 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("您的手机号码是%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) {
    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);
  }
 }

 //为什么光标进入密码框事件不选onClick?因为要点两下才会触发onClick动作(第一下是切换焦点动作)
 @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="http://schemas.android.com/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="验证码登录"
   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="手机号码:"
   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="请输入手机号码"
   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="请输入密码"
    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, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
    return;
   }
   mVerifyCode = String.format("%06d", (int) (Math.random() * 1000000 % 1000000));
   AlertDialog.Builder builder = new AlertDialog.Builder(this);
   builder.setTitle("请记住验证码");
   builder.setMessage("手机号"+mPhone+",本次验证码是"+mVerifyCode+",请输入验证码");
   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, "请输入正确的新密码", 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, "请输入正确的验证码", 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="http://schemas.android.com/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="请输入新密码"
   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="确认新密码:"
   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_second"
   android:background="@drawable/editext_selector"
   android:gravity="left|center"
   android:hint="请再次输入新密码"
   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_verifycode"
   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_verifycode" >

   <EditText
    android:id="@+id/et_verifycode"
    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="请输入验证码"
    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_verifycode"
    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>

 <Button
  android:id="@+id/btn_confirm"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="确定"
  android:textColor="@color/black"
  android:textSize="22sp" />

</LinearLayout>

当输入完手机号之后,点击密码编辑框时,从数据库查看内容,如果含有该号的密码则自动添加,如果没有则空。勾选记住密码选项之后,如果登陆成功则保存到数据库。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android SQLite数据库基本操作方法

    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

  • Android编程之SQLite数据库操作方法详解

    本文实例讲述了Android SQLite数据库操作方法.分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型包括: 1.

  • android SQLite数据库总结

    SQLite SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用. sql语法就不介绍了,直接看在android中的使用 SQLiteOpenHelper--封装好的数据库操作辅助类,需重写 重写方法 onCreate:初始化数据库,创建表,添加初始数据 onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等 常用方法 getReadableDatabase() 

  • Android使用SQLite数据库的示例

    一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统).SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类.主要特点:轻量级,单一文件,跨平台,开源. 二. Android中SQLite数据库的使用 1.创建SQLite数据库 SQLiteDatabase db= SQLiteDatabase.openOrCreateDatabase( "/data/data/" + getPackageName() + "

  • Android SQLite事务处理结合Listview列表显示功能示例

    本文实例讲述了Android SQLite事务处理结合Listview列表显示功能.分享给大家供大家参考,具体如下: 前面的文章里介绍过事务的特点如原子性,隔离性,一致性,持久性.下面就结合Android的sqlite来说下,这次的文章里会把listview也结合起来用.实际上android里的事务和我们数据库里的是一样的.也是开启事务,操作,提交事务.如果出现问题就回滚. public void Transaction(){ SQLiteDatabase database=db.getRead

  • Android批量插入数据到SQLite数据库的方法

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下几种方式: 1.使用db.execSQL(sql) 这里是把要插入的数据拼接成可执行的sql语句,然后调用db.execSQL(sql)方法执行插入. public void inertOrUpdateDateBatch(List<

  • Android利用listview控件操作SQLite数据库实例

    在本实例中,首先我们利用SQLiteOpenHelper类建立一个数据库,并写好增.删.查等方法,通过SimpleCursorAdapter连接listview实现数据库的增加.查询以及长按删除的功能. 首先,我们先认识一下什么是SQLiteOpenHelper类. Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert .delete.update .query .执行SQL命令等操作.同时又为SQLiteDatabase提供了一个辅助类,SQL

  • Android SQLite数据库版本升级的管理实现

    Android SQLite数据库版本升级的管理实现 我们知道在SQLiteOpenHelper的构造方法: super(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 中最后一个参数表示数据库的版本号.当新的版本号大于当前的version时会调用方法: onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 所以我们

  • Android开发笔记SQLite优化记住密码功能

    本文实例为大家分享了Android SQLite优化记住密码功能的具体代码,供大家参考,具体内容如下 package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import com.example.alimjan.hello_world.bean.UserInfo; import com.example.alimjan.hello_world.dataBase.UserDBHelper; i

  • Android实现登陆界面的记住密码功能

    本文实例为大家分享了Android实现登陆界面记住密码功能的具体代码,供大家参考,具体内容如下 所需工具 一.复选框控件:CheckBox,二.SharedPreferences用于存储数据,该工具的读取和写入较为简单,放在代码里的注释中解释 实现逻辑: 如果没弄懂逻辑,代码看起来还是有点小难度的 一.判断SharedPreferences中已存入的CheckBox的Boolean信息(没有读取到则默认条件为“否”),如果条件为“是”(同时满足能读取到和读取的信息为“是”两个条件),通过Shar

  • Android通过"记住密码"功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

  • Android sharedPreferences实现记住密码功能

    实现记住密码功能,供大家参考,具体内容如下 编写界面交互代码: package com.example.bz0209.login; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bund

  • Android实现带有记住密码功能的登陆界面

    本文实例为大家分享了Android带有记住密码功能的登陆界面实现代码,供大家参考,具体内容如下 1.设计思路 主要采用SharedPreferences来保存用户数据,本Demo没有经过加密,所有一旦Android系统被ROOT的话,其他用户就可以查看用户的私有目录,密码文件就很不安全.所以真正应用在软件上面的,一定要经过加密才保存,可以选择MD5加密. SharedPreferences介绍可以参看这篇博文:http://www.jb51.net/article/84859.htm TextW

  • Android实现记住密码功能

    本文实例为大家分享了Android实现记住密码功能的具体代码,供大家参考,具体内容如下 LoginActivity.java package com.wangdeqiang.www.chatwithrobot.BroadcastBestPractice; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preferen

  • Android通过记住密码功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

  • Android开发笔记之Android中数据的存储方式(一)

    对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理,有实时性的需求等.

  • 基于localStorge开发登录模块的记住密码与自动登录实例

    关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个哥们说有私活,开发一个****模块,我那天手痒痒就和他聊了两句,然后,就决定给她做这个模块了,和他谈了谈交付时间,他说最迟两天,然后谈了谈加个,最后达成,500¥!!!这个模块其实第一天晚上我就开发出来了,那时我给他微信说,功能模块开发ok了,要不要远程查看一下,没问题的话就交了,一会他回我,好了就发过来,然后微信就转过来500¥,当时很诧异,毕竟是处女秀,然后就把项目交给他了,并且是完美交付,在客户那里,也没有出现

  • Android开发笔记之:AsyncTask的应用详解

    AsyncTask的介绍及基本使用方法关于AsyncTask的介绍和基本使用方法可以参考官方文档和<Android开发笔记之:深入理解多线程AsyncTask>这里就不重复.AsyncTask引发的一个问题上周遇到了一个极其诡异的问题,一个小功能从网络上下载一个图片,然后放到ImageView中,是用AsyncTask来实现的,本身逻辑也很简单,仅是在doInBackground中用HTTP请求把图片的输入流取出,然后用BitmapFactory去解析,然后再把得到的Bitmap放到Image

随机推荐