`

Android用SharedPreferences记住用户名

阅读更多

SharedPreferences是Android中存储简单数据的一个工具类。可以想象它是一个小小的Cookie,它通过用键值对的 方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名 /shared_prefs/)自己定义的xml文件中。

 

一、简介

  它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容。

 

二、重要方法

public abstract boolean contains (String key) :检查是否已存在该文件,其中key是xml的文件名。

edit ():为preferences创建一个编辑器Editor,通过创建的Editor可以修改preferences里面的数据,但必须执行commit()方法。

getAll ():返回preferences里面的多有数据。

getBoolean (String key, boolean defValue):获取Boolean型数据

getFloat (String key, float defValue):获取Float型数据

getInt (String key, int defValue):获取Int型数据

getLong (String key, long defValue):获取Long型数据

getString (String key, String defValue):获取String型数据

registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener):注册一个当 preference发生改变时被调用的回调函数。

unregisterOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener):删除当前回调函数。

 

三、重要接口SharedPreferences.Editor

  1.简介

  用于修改SharedPreferences对象的内容,所有更改都是在编辑器所做的批处理,而不是复制回原来的SharedPreferences或持久化存储,直到你调用commit(),才将持久化存储。

  

  2.重要方法

  clear ():清除内容。

  commit ():提交修改

  remove (String key):删除preference

下面通过“记住密码”功能

 

四、实例

  效果图如下

首页

 

登录成功后的页面

 

当第一次登录点击”记住密码“后,第二次打开时的页面

 

2.代码

布局文件 login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android "
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 android:gravity="right" android:layout_gravity="right"
 android:background="@drawable/default_bg" android:orientation="vertical">
 <TableLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:stretchColumns="1">
  <TableRow android:gravity="center" android:layout_gravity="center">
   <ImageView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:id="@+id/ivlogo"
    >
   </ImageView>
  </TableRow>
 </TableLayout>
 <TableLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:stretchColumns="1">
  <TableRow android:layout_marginTop="100dip">
   <TextView android:layout_width="wrap_content"
    android:layout_marginLeft="20dip" android:gravity="center_vertical"
    android:layout_height="wrap_content" android:id="@+id/tvaccount"
    android:text="帐号:" android:textSize="20sp">
   </TextView>

   <EditText android:layout_width="70px" android:layout_height="wrap_content"
    android:id="@+id/etaccount" android:layout_marginRight="20dip"
    android:maxLength="20"></EditText>
  </TableRow>
  <TableRow android:layout_marginTop="10dip">
   <TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/tvpw"
    android:layout_marginLeft="20dip" android:gravity="center_vertical"
    android:text="密码:" android:textSize="20sp">
   </TextView>

   <EditText android:layout_width="70px" android:layout_height="wrap_content"
    android:layout_marginRight="20dip" android:id="@+id/etpw"
    android:inputType="textPassword"></EditText>
  </TableRow>
 </TableLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android "
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:orientation="horizontal" android:layout_marginTop="5dip" android:layout_marginRight="20dip">
 
  <TextView android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/tvclear"
   android:text="清除Cookies" android:textColor="#aa0000" android:textSize="12px"></TextView>
  
 </LinearLayout>
 <TableLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:layout_marginTop="20dip">
  <TableRow android:gravity="center" android:layout_width="fill_parent">
   <Button android:layout_width="100px" android:layout_height="wrap_content"
    android:id="@+id/btnlogin" android:layout_gravity="center"
    android:text="登录"></Button>

   <Button android:layout_width="100px" android:layout_height="wrap_content"
    android:id="@+id/btnexit" android:layout_gravity="center"
    android:text="退出"></Button>
  </TableRow>
 </TableLayout>

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android "
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:orientation="horizontal" android:layout_marginTop="25dip">

  <CheckBox android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/cbrp"
   android:text="记住密码" android:textSize="12px"></CheckBox>
  <CheckBox android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:id="@+id/cbal"
   android:text="自动登录" android:textSize="12px"></CheckBox>
 </LinearLayout>
</LinearLayout>

 

java代码

package com.wjq;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.wjq.beans.User;
import com.wjq.func.UserMgr;

public class Login extends Activity {
 private EditText etAccount;
 private EditText etPW;
 private Button btnLogin;
 private Button btnExit;
 private CheckBox cbrp;
 private CheckBox cbal;
 private UserMgr userMgr;
 private User user;
 private SharedPreferences sp;
 private TextView tvClear;

 /*
  * (non-Javadoc)
  *
  * @see android.app.Activity#onCreate(android.os.Bundle)
  */
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);

  setContentView(R.layout.login);

  etAccount = (EditText) findViewById(R.id.etaccount);
  etPW = (EditText) findViewById(R.id.etpw);
  cbrp = (CheckBox) findViewById(R.id.cbrp);
  cbal = (CheckBox) findViewById(R.id.cbal);
  btnLogin = (Button) findViewById(R.id.btnlogin);
  btnExit = (Button) findViewById(R.id.btnexit);
  tvClear=(TextView)findViewById(R.id.tvclear);

  InitConfig();
  cbrp
    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

     @Override
     public void onCheckedChanged(CompoundButton buttonView,
       boolean isChecked) {
      sp = getSharedPreferences("UserInfo", 0);
      sp.edit().putBoolean("cbrp", isChecked).commit();
     }

    });

  cbal
    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

     @Override
     public void onCheckedChanged(CompoundButton buttonView,
       boolean isChecked) {
      sp = getSharedPreferences("UserInfo", 0);
      sp.edit().putBoolean("cbal", isChecked).commit();
     }

    });
  btnLogin.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    user = new User(etAccount.getText().toString(), etPW.getText()
      .toString());

    Log.i("tag", "Account:" + etAccount.getText().toString());
    Log.i("tag", "Password:" + etPW.getText().toString());

    userMgr = new UserMgr();
    Boolean flag = userMgr.CheckUser(user, Login.this);

    if (!flag) {
     Toast.makeText(Login.this, "用户验证错误!", 1000).show();
    }

    else {
     if (cbrp.isChecked()) {
       sp = getSharedPreferences("UserInfo",
        Context.MODE_WORLD_WRITEABLE
          | Context.MODE_WORLD_READABLE);
      
      sp.edit().putString("account",
        etAccount.getText().toString()).commit();
      sp.edit().putString("password",
        etPW.getText().toString()).commit();
     }
    }
   }

  });

  btnExit.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    System.exit(0);
   }
  });
  
  tvClear.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {sp=getSharedPreferences("UserInfo", 0);
    
    sp.edit().clear().commit();
   }});
 }

 

//初始化配置

 private void InitConfig() {
  sp = getSharedPreferences("UserInfo", 0);
  etAccount.setText(sp.getString("account", null));
  etPW.setText(sp.getString("password", null));
  cbal.setChecked(sp.getBoolean("cbal", false));
  cbrp.setChecked(sp.getBoolean("cbrp", false));
 }
}

 

说明

1.写内容

 sp = getSharedPreferences("UserInfo", 0);
      sp.edit().putBoolean("cbal", isChecked).commit();
     UserInfo是指xml文件的文件名,如果此文件已存在则直接向其中写内容“isChecked”的值,首先通过SharedPreferences的edit()方法创建editor,然后调用commit()方法提修改

 

2.读内容

sp = getSharedPreferences("UserInfo", 0);
  etAccount.setText(sp.getString("account", null));
  etPW.setText(sp.getString("password", null));
  cbal.setChecked(sp.getBoolean("cbal", false));
  cbrp.setChecked(sp.getBoolean("cbrp", false));
 

分享到:
评论
1 楼 雨雾纷飞 2012-07-03  

相关推荐

    Android---SharedPreferences 记住用户名和密码

    SharedPreferences是Android提供的一个轻量级存储类,经常用于保存软件设置参数。存放的格式为xml,文件存放在 /data/data/&lt;package name&gt;/shared_prefs下。

    SharedPreferences记住用户名密码

    在Android应用开发中,"SharedPreferences记住用户名密码"是一个常见的功能,它允许用户在登录一次之后,再次打开应用时无需重新输入用户名和密码。这个功能提高了用户体验,减少了用户的操作步骤。下面我们将深入...

    Android通过SharedPreferences实现自动登录记住用户名和密码功能

    最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现。 SharedPreferences简介 ...SharedPreferences使用实例:记住用户名密码自动登录 大致了解了SharedPre

    android登录记住用户名和密码

    综上所述,实现“记住用户名和密码”的功能主要涉及SharedPreferences的使用,包括数据的保存和读取。同时,UI设计的细节,如shape和图片选择,也对用户体验有着重要影响。在实际开发中,要确保界面的一致性,提供...

    Android记住用户名和密码

    综上所述,实现Android记住用户名和密码的功能涉及SharedPreferences的使用、UI布局的设计、事件监听、数据的读写以及安全和权限的管理等多个方面。通过学习和实践这些知识点,开发者可以为用户提供更加便捷和安全的...

    记住用户名密码完整实例

    在Android中,有多种方式可以保存用户的数据,如SharedPreferences、SQLite数据库、文件存储或使用Android提供的AccountManager。在这个实例中,我们最常用且简单的方式是SharedPreferences。 **1. ...

    Android实现用户登录记住密码功能

    可以使用SharedPreferences.Editor来存储数据,并使用SharedPreferences来检索数据。 3. 在登录按钮的点击事件中,使用SharedPreferences来检索用户名和密码,并自动填充到EditText控件中。 4. 如果用户选择记住...

    android 程序记住用户名和密码自动登录

    总之,实现Android程序记住用户名和密码自动登录的关键在于合理利用SharedPreferences存储数据,并结合自动登录逻辑以及必要的安全性措施。同时,开发者应该关注用户体验,提供可选的自动登录功能,并确保数据安全。

    Android数据存储——SharedPreferences(登入记住密码)

    在Android中,我们通常在Activity或Fragment中使用SharedPreferences。首先,我们需要获取到SharedPreferences实例。这可以通过以下代码实现: ```java SharedPreferences sharedPreferences = ...

    Android中使用SharedPreferences完成记住账号密码的功能

    通过以上步骤,我们就成功地实现了Android应用中使用SharedPreferences记住账号密码的功能。注意,虽然SharedPreferences提供了方便的本地数据存储,但它并不适合存储大量或敏感数据,因为它的数据是明文存储的,...

    android实现记住用户名和密码以及自动登录

    通过使用 SharedPreferences,可以实现记住用户名和密码,并且在下次登录时自动填充用户名和密码,从而提高用户体验。 在 Android 中,SharedPreferences 是一种轻量级的存储机制,可以存储少量的数据。通过使用 ...

    Android中使用SharedPreferences完成记住密码项目的任务要求.pdf

    在Android开发中,SharedPreferences是用于存储轻量级数据的一个关键组件,它主要用于保存用户的偏好设置,例如在登录界面中记住用户名和密码的功能。下面我们将详细讲解如何使用SharedPreferences来实现这个功能。 ...

    Android实现记住用户名和密码功能

    在Android应用开发中,实现...以上就是Android实现记住用户名和密码功能的完整流程,包括界面设计、事件监听、数据存储与加载,以及异常处理。通过这些步骤,用户可以选择记住他们的登录信息,从而提升应用的用户体验。

    Android自动登录及记住密码

    Android提供了`SharedPreferences`接口,用于在设备上持久化地存储键值对数据。可以将账号和加密后的密码存储在这里。 2. **加密与解密**:为了保护用户数据,我们需要对密码进行加密。Android提供了`KeyStore`系统...

    android studio 利用SharedPreferences实现自动登录

    - 使用edit()方法获取Editor对象,然后将用户名和密码(可加密存储)以及是否记住密码的选项存入SharedPreferences: ```java Editor editor = sharedPreferences.edit(); editor.putString("username", ...

    android studio 第五章课后实践(实现登录界面设计、记住密码操作)

    6. 当用户选择“记住我”并登录后,下次打开应用时,可以在onCreate()方法中读取SharedPreferences中的用户名和密码,如果存在,可直接跳过登录界面,直接进入主界面。 以上就是关于Android Studio中实现登录界面...

    android SharedPreferences

    在这个"android SharedPreferences"的主题中,我们将深入探讨SharedPreferences的工作原理、使用方法以及其在实现简单登录功能中的应用。 SharedPreferences是Android提供的一种轻量级的数据存储方式,它以键值对的...

Global site tag (gtag.js) - Google Analytics