Android学习笔记之数据的共享存储SharedPreferences

(1)布局文件,一个简单的登录文件;

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

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

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_alignBottom="@+id/textView1"
        android:layout_toRightOf="@+id/textView1"
        android:ems="10" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView1"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="17dp"
        android:text="密码:" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:ems="10"
        android:inputType="textPassword" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/checkBox1"
        android:layout_marginLeft="34dp"
        android:layout_marginTop="32dp"
        android:layout_toRightOf="@+id/button1"
        android:text="取消" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/editText2"
        android:layout_marginTop="22dp"
        android:text="记住用户名" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignLeft="@+id/editText2"
        android:text="登录" />

    <CheckBox
        android:id="@+id/checkBox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/checkBox1"
        android:layout_alignBottom="@+id/checkBox1"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/button1"
        android:text="静音登录" />

</RelativeLayout>

(2)目录结构:

(3)SharedPreferences的工具类LoginService.java

package com.lc.data_storage_share.sharepreference;

import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class LoginService {
	private Context context; // 上下文

	public LoginService(Context context) {
		this.context = context;
	}

	/*
	 * 保存登录信息
	 */
	public boolean saveLoginMsg(String name, String password) {
		boolean flag = false;
		// 不要加后缀名,系统自动以.xml的格式保存
		// 这里的login是要存放的文件名
		SharedPreferences preferences = context.getSharedPreferences("login",
				context.MODE_PRIVATE + context.MODE_APPEND);
		Editor editor = preferences.edit();
		editor.putString("name", name);
		editor.putString("password", password);
		flag = editor.commit();
		return flag;
	}

	/*
	 * 保存文件
	 */
	public boolean saveSharePreference(String filename, Map<String, Object> map) {
		boolean flag = false;
		SharedPreferences preferences = context.getSharedPreferences(filename,
				Context.MODE_PRIVATE);
		/*
		 * 存数据的时候要用到Editor
		 */
		Editor editor = preferences.edit();
		for (Map.Entry<String, Object> entry : map.entrySet()) {
			String key = entry.getKey();
			Object object = entry.getValue();

			if (object instanceof Boolean) {
				Boolean new_name = (Boolean) object;
				editor.putBoolean(key, new_name);
			} else if (object instanceof Integer) {
				Integer integer = (Integer) object;
				editor.putInt(key, integer);
			} else if (object instanceof Float) {
				Float f = (Float) object;
				editor.putFloat(key, f);
			} else if (object instanceof Long) {
				Long l = (Long) object;
				editor.putLong(key, l);
			} else if (object instanceof String) {
				String s = (String) object;
				editor.putString(key, s);
			}
		}
		flag = editor.commit();
		return flag;
	}

	/*
	 * 读取文件
	 */
	public Map<String, ?> getSharePreference(String filename) {
		Map<String, ?> map = null;
		SharedPreferences preferences = context.getSharedPreferences(filename,
				Context.MODE_PRIVATE);
		/*
		 * 读数据的饿时候只需要访问即可
		 */
		map = preferences.getAll();
		return map;
	}
}

(3)MainActivity.java

package com.lc.data_storage_share;

import java.util.HashMap;
import java.util.Map;

import com.example.data_storage_share.R;
import com.lc.data_storage_share.sharepreference.LoginService;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;

/*
 * 单元测试的时候需要在清单文件中
 */
public class MainActivity extends Activity {

	private Button button1;// 登录
	private Button button2;// 取消
	private EditText editText1, editText2;
	private CheckBox checkBox1;// 记住密码
	private CheckBox checkBox2; // 静音登录

	private LoginService service;
	Map<String, ?> map = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1 = (Button) this.findViewById(R.id.button1);
		button2 = (Button) this.findViewById(R.id.button2);
		editText1 = (EditText) this.findViewById(R.id.editText1);
		editText2 = (EditText) this.findViewById(R.id.editText2);
		checkBox1 = (CheckBox) this.findViewById(R.id.checkBox1);
		checkBox2 = (CheckBox) this.findViewById(R.id.checkBox2);

		service = new LoginService(this);
		map = service.getSharePreference("login");
		if (map != null && !map.isEmpty()) {
			editText1.setText(map.get("username").toString());
			checkBox1.setChecked((Boolean) map.get("isName"));
			checkBox2.setChecked((Boolean) map.get("isquiet"));
		}
		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (editText1.getText().toString().trim().equals("admin")) {
					Map<String, Object> map1 = new HashMap<String, Object>();
					if (checkBox1.isChecked()) {
						map1.put("username", editText1.getText().toString()
								.trim());
					}else {
						map1.put("username", "");
					}
					map1.put("isName", checkBox1.isChecked());
					map1.put("isquiet", checkBox2.isChecked());

					service.saveSharePreference("login", map1);
				}
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

(4)测试类:

package com.lc.data_storage_share;

import java.util.HashMap;
import java.util.Map;

import android.test.AndroidTestCase;
import android.util.Log;

import com.lc.data_storage_share.sharepreference.LoginService;

public class MyTest extends AndroidTestCase {

	private final String TAG = "MyTest";

	public MyTest() {
		// TODO Auto-generated constructor stub
	}

	/*
	 * 登录
	 */
	public void save() {
		LoginService service = new LoginService(getContext());
		boolean flag = service.saveLoginMsg("admin", "123");
		Log.i(TAG, "-->>" + flag);
	}

	/*
	 * 保存文件
	 */
	public void saveFile() {
		LoginService service = new LoginService(getContext());
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "jack");
		map.put("age", 23);
		map.put("salary", 23000.0f);
		map.put("id", 1256423132l);
		map.put("isManager", true);
		boolean flag = service.saveSharePreference("msg", map);
		Log.i(TAG, "-->>" + flag);
	}

	/*
	 * 读取文件
	 */
	public void readFile() {
		LoginService service = new LoginService(getContext());
		Map<String, ?> map = service.getSharePreference("msg");
		Log.i(TAG, "-->>" + map.get("name"));
		Log.i(TAG, "-->>" + map.get("age"));
		Log.i(TAG, "-->>" + map.get("salary"));
		Log.i(TAG, "-->>" + map.get("isManager"));
		Log.i(TAG, "-->>" + map.get("id"));
	}

}

如何添加Junit测试单元:

1.在清单文件中添加:

2.在application中添加:

3.测试类MyTest要继承AndroidTestCase

(5)结果,下次登录的时候会记着用户名

时间: 2024-10-16 08:42:07

Android学习笔记之数据的共享存储SharedPreferences的相关文章

Android学习笔记之数据的内部存储方式实习数据的读写

(1)目录结构 (2) 布局文件: <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"

Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

Android 学习笔记之数据存储SharePreferenced+File

学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用户之间形成交互...需要保存用户的设置和用户的数据信息...这些都离不开数据的存储...Android的数据采用五种方式来进行存储...在这里就先介绍两种存储方式... 1.使用SharedPreferences存储数据...   对于软件配置参数的保存,Windows系统采用ini文件来进行保存,

Android学习笔记-保存数据的实现方法1

Android开发中,有时候我们需要对信息进行保存,那么今天就来介绍一下,保存文件到内存,以及SD卡的一些操作,及方法,供参考. 第一种,保存数据到内存中: //java开发中的保存数据的方式 public static boolean saveUserInfo(String username,String password){ File file = new File("/data/data/com.ftf.login/info.txt"); try { FileOutputStre

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

Android学习笔记(十二)——使用意图传递数据的几种方式

使用意图传递数据的几种方式 点此获取完整代码 我们除了要从活动返回数据,也常常要传递数据给活动.对此我们可以使用Intent对象将这些数据传递给目标活动. 1.创建一个名为PassingData的项目,在activity_main.xml文件中添加一个Button: <Button android:id="@+id/btn_SecondActivity" android:layout_width="fill_parent" android:layout_hei

Android学习笔记(四九):通过Content Provider访问数据

在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过Content Provider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子.在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问. 读取信息 读取信息方式,在笔记(四七)中已经介绍,代码如下 private voidread(){     /* 通过managedQuery读取,第1参数表示URI, 第2参数表示所需读取的信息,第3个参数是限制条件,类似SQL

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

Android学习笔记(一):基本概念

本文内容引用于<Android开发教程&笔记> Android的概念: Android是一个专门针对移动设备的软件及,它包括一个操作系统,中间件和一些重要的应用程序.Beta版的Android SDK提供了在Android平台上使用Java语言进行Android应用开发必须的工具和API接口. 特性 • 应用程序框架 支持组件的重用与替换• Dalvik 虚拟机 专为移动设备优化• 集成的浏览器 基于开源的 WebKit 引擎• 优化的图形库 包括定制的2D 图形库,3D 图形库基于