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. List-ApI及详解

    1.API : add(Object o) remove(Object o) clear() indexOf(Object o) get(int i) size() iterator() isEmpt ...

  2. tyvj1011 - 传纸条 ——DP

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1011 状态转移方程: f[k,x1,x2] = max(f[k-1,x1,x2],f[k-1,x1-1, ...

  3. leetcode 115 Distinct Subsequences ----- java

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  4. 重启Tomcat的脚本

    说明:一台服务器上跑了8个Tomcat case的方式: #!/bin/bash #reboot tomcat!!! #Author:fansik echo -e "\033[1;42;31 ...

  5. scala言语基础学习

    scala变长参数: 递归累加: scala异常的使用: array和arraybuffer的使用 定长array: arraybuff:

  6. ARM1138@库函数速查

    1. GPIO库函数 可实现的功能: 获得/设置指定管脚的方向(输入.输出)和模式(硬件控制) 获取/设置指定管脚的配置(驱动强度2/4/8/8_SCmA.管脚模式:推挽(弱上拉/弱下拉)/开漏(弱上 ...

  7. Android开源框架ImageLoader的完美例子

    本文转载于:http://blog.csdn.net/wwj_748/article/details/10079311 2013年8月19日开源框架之Universal_Image_Loader学习 ...

  8. Linux-dd命令详解【转】

    转自http://www.cnblogs.com/dkblog/archive/2009/09/18/1980715.html   Linux-dd命令详解 dd 是 Linux/UNIX 下的一个非 ...

  9. network Driver , TDI(Transport Driver Interface) Drivers

    https://msdn.microsoft.com/en-us/library/windows/hardware/ff565094(v=vs.85).aspx https://msdn.micros ...

  10. java_stack

    栈是一种数据结构,它代表只能在某一端进行插入.删除操作的特殊线性表. 栈的最大特点是是后进先出(First In Last Out),对栈的操作主要是入栈和出栈,判断栈是否为空,计算栈的大小. 对栈而 ...