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. 【字体区别】Serif和Sans Serif

    [字体区别]Serif和Sans Serif 在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Mo ...

  2. 转载:LBP的初步理解

    转自http://blog.csdn.net/ty101/article/details/8905394 本文的PDF版本,以及涉及到的所有文献和代码可以到下列地址下载: 1.PDF版本以及文献:ht ...

  3. 11. Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  4. HDU 4358 莫队算法+dfs序+离散化

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others)T ...

  5. codeforces hungry sequence 水题

    题目链接:http://codeforces.com/problemset/problem/327/B 这道题目虽然超级简单,但是当初我还真的没有想出来做法,囧,看完别人的代码恍然大悟. #inclu ...

  6. PHP实例开发(2)PHP通过mail()或Socket发邮件

    PHP通过mail()或Socket发邮件 1.PHP中发送邮件的方法 PHP发送邮件是“非常的简单” 因为他提供了mail()函数直接发送,但这也继 register globals 成为了对初学者 ...

  7. SQL书写规范及常用SQL语句

    常用的查询语句 SELECT * FROM 表名 [WHERE 条件 或 GROUP BY 字段名 HAVING] ORDER BY 字段名 排序方式 LIMIT 初始值,数量; SELECT fna ...

  8. Python Tornado

    按照http://www.tornadoweb.cn/所提供的方法下载安装后编写如下程序: import tornado.ioloop import tornado.web class MainHan ...

  9. ExtJS 的一些技巧与问题

    1.修改列表(grid)里store的加载url grid.getStore().proxy.conn.url = "xxx.jsp"; grid.getStore().reloa ...

  10. 黑马程序员——JAVA基础之程序控制流结构之判断结构,选择结构

    ------- android培训.java培训.期待与您交流! ---------- 程序控制流结构:顺序结构:判断结构:选择结构:循环结构. 判断结构:条件表达式无论写成什么样子,只看最终的结构是 ...