android的数据存储和IO

SharedPreferences与Editor简介

SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的key-value对。

SharedPreferences接口主要负责读取应用程序的Preperences数据,其提供了如下常用方法访问SharedPreferences中的key-value:

boolean contains(String key) 判断SharedPreferences是否包含指定的key的数据
abstract Map(String,?) getAll() 获取SharedPreferences里面所有的key-value对
boolean getXxx(String key,xxx defValue)

获取SharedPreferences数据里指定的key对应的value.如果key不存在,则默认返回

defValue,其中xxx可以是boolean、float、int、long、String等各种基本类型的值.

SharedPreferences本身没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取其对应的Editor对象。

Editor对象提供了如下方法想SharedPreferences写入数据:

SharedPreferences.Editor clear() 清空SharedPreferences里所有数据
SharedPreferences.Editor putXxx(String key,xxx value) 向SharedPreferences存入指定的key对应的数据.其中xxx可以是boolean、float、int、long、String等各种基本类型的值.
SharedPreference.Editor remove(String key) 删除SharedPreference里面指定的key对应的数据 
boolean commit() 当Editor完成后,调用commit()提交修改 

SharedPreference本身是一个接口,无法创建实例,只能通过Context提供getSharedPreferences(String name,int mode)方法来获取SharedPreference实例,该方法

的第二个参数支持如下几个值:

Context.MODE_PRIVATE 指定该SharedPreference数据只能被本地应用程序读、写
Context.MODE_WORLD_READABLE 指定该SharedPreference数据能被其他应用程序读、但不能写
Context.MODE_WORLD_WRITEABLE 指定该SharedPreference数据能被其他应用程序读、写

实例一:

布局文件==》
<LinearLayout 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:orientation="horizontal"
tools:context=".MainActivity" > <Button
android:id="@+id/btnRead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="read" /> <Button
android:id="@+id/btnWrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="write" /> </LinearLayout> 代码实现==>
package com.example.mysharedpreferences; import java.text.SimpleDateFormat;
import java.util.Date; import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SimpleAdapter;
import android.widget.Toast; public class MainActivity extends Activity
{
SharedPreferences preferences;
SharedPreferences.Editor editor; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 获取只能被本地应用程序读写的SharedPreferences 对象
preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
editor = preferences.edit(); Button btnRead = (Button) this.findViewById(R.id.btnRead);
Button btnWrite = (Button) this.findViewById(R.id.btnWrite);
btnRead.setOnClickListener(new MyButtonClick());
btnWrite.setOnClickListener(new MyButtonClick());
} private class MyButtonClick implements OnClickListener
{
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnRead:
// 读取字符串数据
String time = preferences.getString("time", null);
// 读取int数据
int num = preferences.getInt("num", 0);
String result = time == null ? "您暂时还未写入数据" : "写入时间为:" + time + "\n上次随机产生的数字为" + num;
Toast.makeText(MainActivity.this, result, 5000).show();
break;
case R.id.btnWrite:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
// 存入当前时
editor.putString("time", sdf.format(new Date()));
editor.putInt("num", (int) (Math.random() * 100));
// 提交所有存入的数据
editor.commit();
break;
}
} } @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;
} }

运行效果:

实例二:

读写其他应用程序SharedPreferences

注意:要读写其他应用程序的SharedPreferences,前提是创建该SharedPreferences的应用程序指定相应的访问权限。

实现读取其他应用程序的SharedPreferences的操作步骤:

1.创建其他程序对应的Context,Eg:useCount = createPackageContext("org.crazyit.io",Context.CONTEXT_IGNORE_SECURITY);  ----"org.crazyit.io"包名称

2.调用其他应用程序的Context的getSharedPreferences(String key,int mode)即可获取相应的SharedPreferences对象

3.如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit()方法获取相应的Editor即可。

如下程序实现如何读取上一个实例中所保存的SharedPreferences数据:

注意:开发者也可通过IO的方式读取SharedPreferences对应的XMl文件,再通过解析来获取数据也是可行的。IO方式比较繁琐,不建议使用...

android学习笔记45——android的数据存储和IO的更多相关文章

  1. Android学习之基础知识九—数据存储(持久化技术)

    数据持久化是将那些内存中的瞬时数据保存到存储设备,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储.SharedP ...

  2. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  3. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  4. Android学习笔记_79_ Android 使用 搜索框

    1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...

  5. Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns

    摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...

  6. Android学习笔记之Android Studio下创建menu布局文件

    1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...

  7. android学习笔记(9)android程序调试学习

    相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message);        //verbose模式,打印最具体的日志  Log.d(tag,message);        // ...

  8. Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

    上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(O ...

  9. Android 学习笔记之实时保存数据-现场保护onSaveInstanceState()

    数据保存:在软件开发中我们希望保存下各个Activity数据,以实现客户数据的时时保存,达到较好的用户体验. 那么我们需要解决如下问题: 1.什么时候保存? 2.保存哪些数据?     我想保存应用产 ...

随机推荐

  1. 349. Intersection of Two Arrays

    Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...

  2. HDU 4311 前缀和

    Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-AC ...

  3. sgu259 Printed PR    贪心

    link:http://acm.sgu.ru/problem.php?contest=0&problem=259 思路就是贪心. 首先要读懂题目,输入的方式,把样例读懂. 第一,打印的总时间一 ...

  4. c#部分---输入班级人数,输入语文数学英语成绩,打印语文前两名,数学后两名,英语平均分

    1.开始收集输入项 2.用冒泡排序,统计语文成绩,并附带把语数英三门课全排列 3.数学成绩排序,附带把三门课全排序‘ 4.最后算英语的平均分:

  5. https那些事儿

    (一)SSL/TLS协议运行机制的概述 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获 ...

  6. MySQL-python模块

    1.  Python 操作 Mysql 模块的安装 linux: pip install MySQL-python 或 yum -y install MySQL-python windows: exe ...

  7. KMP字符串模式匹配学习笔记

    KMP算法实验 1.编程计算模式串(子串)的next值.2.利用KMP算法在主串中找到模式串的位置. 参考代码:---------int getNexlVal( char * s,  int j)// ...

  8. CorelDRAW中拆清除调和效果的技巧

    图形对象应用的调和效果达不到用户的满意,可以将该种调和效果清除,清除调和效果后,只保留起始对象和结束对象.CorelDRAW软件支持两种方法来清除调和对象,本教程将详解CorelDRAW中清除调和效果 ...

  9. System.Diagnostics命名空间里的Debug类和Trace类的用途

    在 .NET 类库中有一个 System.Diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类--Debug ...

  10. MVC的异步,Entity Framework的异步,ADO.NET的异步,

    MVC的异步化改造 无比轻松,只要把ActionResult改为async Task<AstionResult>: public async Task<ActionResult> ...