Android入门(16)——数据存储之SharedPreferences

 

1. Android的四种数据存储方式:


2. SharedPreferences简介:主要存放一些简单的类,int、string,复杂的数据结构就不用这个了。


3. SharedPreferences的使用:


4. 案例一:

 

第一步:在活动文件MainActivity中这样写:然后一定要运行一下程序才行。

package com.example.sharedpreferences;

import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        /*
         * 第一种方法:
         * 生成一个默认的SharedPreferences对象。
         * SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
         * */
        // 第二种方法:生成并直接设置访问权限,第一个参数是文件的名字,第二个参数是文件的权限。例如是否可以被其他程序读取。
        SharedPreferences pref = getSharedPreferences("myPref",MODE_PRIVATE);
        // 获取一个编辑对象editor。
        Editor editor = pref.edit();
        // 写入数据:
        editor.putString("name", "张三");
        editor.putInt("age", 30);
        editor.putLong("time", System.currentTimeMillis());
        editor.putBoolean("default", true);
        // 提交数据:
        editor.commit();
        // 移除default这条数据:每次都要提交的。
        editor.remove("default");
        editor.commit();
        
    }
    
}

 

第二步:在页面中搜索File Expoler,然后在data---data---com.example.sharedpreferences(包名.类名)---shared_prefs---myPref.xml(自己创建的文件名):

然后点击右上角第一个的保存按钮,将该文件保存下来:

然后点击保存下来的myPref.xml就可以看到之前在MainActivity中写入的内容:


第三步:使用保存的内容:

在MainActivity的代码后面再加两句:

// 使用值:getString的第二个参数是没有取到内容时的一个默认值。
        System.out.println(pref.getString("name", ""));
        System.out.println(pref.getInt("age", 0));
然后在LogCat中可以看到:

 

5. 案例二:存取用户名实例:

 

第一步:创建布局文件activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/text_username"
        android:layout_toRightOf="@+id/text_username"
        android:ems="10" />

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/userName"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/userName"
        android:ems="10" />

    <CheckBox
        android:id="@+id/checkSaveName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/password"
        android:layout_marginLeft="18dp"
        android:layout_marginTop="14dp"
        android:checked="false"
        android:text="保存用户名" />

    <TextView
        android:id="@+id/text_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/password"
        android:layout_alignBottom="@+id/password"
        android:layout_toLeftOf="@+id/password"
        android:text="密   码:" />

    <TextView
        android:id="@+id/text_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="17dp"
        android:text="用户名:" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/checkSaveName"
        android:layout_below="@+id/checkSaveName"
        android:layout_marginTop="16dp"
        android:onClick="doClick"
        android:text="登录" />

    <Button
        android:id="@+id/btnCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnLogin"
        android:layout_alignBottom="@+id/btnLogin"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/btnLogin"
        android:onClick="doClick"
        android:text="取消" />

</RelativeLayout>
第二步:修改活动文件MainActivity:

package com.example.sharedpreferences;

import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.Editable;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	EditText etUserName,etUserPass;
	CheckBox chk;
	SharedPreferences pref;
	Editor editor;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 初始化控件:
        etUserName = (EditText) findViewById(R.id.userName);
        etUserPass = (EditText) findViewById(R.id.password);
        chk = (CheckBox) findViewById(R.id.checkSaveName);
        // 生成并直接设置访问权限:
        pref = getSharedPreferences("UerInfo",MODE_PRIVATE);
        // 启用编辑
        editor = pref.edit();
        // 自动显示上一次的用户名:
        String name = pref.getString("username", "");
        if(name == null){
        	chk.setChecked(false);
        }
        else{
        	chk.setChecked(true);
        	etUserName.setText(name);
        }
        
    }
    public void doClick(View v){
    	switch(v.getId()){
    	case R.id.btnLogin:
    		// 获取输入的用户名和密码:
    		String name = etUserName.getText().toString().trim();
    		String pass = etUserPass.getText().toString().trim();
    		// 验证用户名和密码,默认用户名为admin,密码是123456;
    		if("admin".equals(name) && "123456".equals(pass)){
    			Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
    			// 如果记住密码被选中,那么就要把这个用户名存入到editor里面。
    			if(chk.isChecked()){
    				editor.putString("username", name);
    				editor.commit();
    			}
    			else{
    				editor.remove("username");
    				editor.commit();
    			}
    		}
    		else{		// 登录失败
    			Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
    		}
    		break; 
    	default:
    		break;
    	}
    }
    
}
效果图:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值