关闭

android几种存储方式理解心得,

285人阅读 评论(0) 收藏 举报

经过这几天的学习,对android的存储方式又有了一定的理解。

android里面的存储方式大体有4种,SharedPreferences文件存储,内存存储,SD卡存储,网络存储,数据库存储。

SharedPreferences注册表的注册方式,在底层是一个xml文件,多用在存储配置参数。使用也是非常的简单,先实例化SharedPreferences ,然后通过实例获得其编辑器,通过编辑器操作数据,最后调用编辑器的commit方法提交数据即可。

插入数据如下:SharedPreferences sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); //存储的文件名,权限

Editor editor = sharedPreferences.edit();// 获取编辑器
Set<Entry<String, String>> set = map.entrySet();
for (Entry<String, String> e : set) {
editor.putString(e.getKey(), e.getValue());
}
editor.commit(); // 提交修改

删除数据:

public static void remove(Context context, String fileName,
Map<String, String> map) {
if (map == null || context == null || fileName == null) {
return;
}
SharedPreferences sharedPreferences = context.getSharedPreferences(
fileName, Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();// 获取编辑器
Set<Entry<String, String>> set = map.entrySet();
for (Entry<String, String> e : set) {
editor.remove(e.getKey());
}
editor.commit(); // 提交修改
}

删除数据和插入数据总的来说大同小异的。只是编辑器根据对应的键,删除对应的值。

查找数据更加简单:public static Map<String, String> find(Context context, String fileName) {
if (context == null || fileName == null) {
return null;
}
SharedPreferences sharedPreferences = context.getSharedPreferences(
fileName, Context.MODE_PRIVATE);
Map<String,String> map=(Map<String, String>) sharedPreferences.getAll();
return map;
}

重要的是调用sharedPreferences的getAll()方法,返回一个Map对象,然后放回给需要调用的位置,再循环取出即可。总的来说sharedPreferences存储方式还是比较简单的,操作也比较简单方便。

内存存储相对于其他的存储方式比较简单,但是其实这样的存储方式其实并不是很常用,因为手机的内存本来就有限。而应用程序又是那么的占用空间。

其机制是使用流,对数据的操作实现读入,写出。

例子代码如下:

数据帮助类如下:

public class FilesUtils {
public static void saveObjectFile(Object obj,String fileName,Context context){
ObjectOutputStream oos=null;
try {
FileOutputStream outputStream=context.openFileOutput(fileName, Context.MODE_PRIVATE);
oos=new ObjectOutputStream(outputStream);
oos.writeObject(obj);
oos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(oos!=null){
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

public static Object getObjectFromFile(String fileName,Context context){
Object obj=null;
ObjectInputStream ois=null;
try {
FileInputStream inputstream=context.openFileInput(fileName);
ois=new ObjectInputStream(inputstream);
obj=ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ois!=null){
try {
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return obj;
}
}

SD卡的存储稍微的复杂一点:要操作sd卡,要获得其对应的权限,


这些权限都是Users Permission下的权限,在确定的时候必须要核对清楚、

而且,由于不同的android手机的sd卡的路径是不一样的,所以要用到android提供的Environment静态类操作环境信息。

public void onClick(View arg0) {
//保存sd卡..
//2构建sd卡的路径
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(MainActivity2.this, "此手机没有加载SD卡...", 3000).show();
return;
}
FileOutputStream fos=null;
//3用流的方式写入到SD卡中
try {
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
Date date=new Date();
String fn=sdf.format(date)+".png";
File f=new File(Environment.getExternalStorageDirectory(), fn);
fos=new FileOutputStream(f);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
savePicToPerson(f.getAbsolutePath());
Toast.makeText(MainActivity2.this, "存到SD卡成功", 3000).show();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}

其中要通过Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)表达式判断是否装载了内存卡,实现第一步的判断。

如果是存储图片到内存卡的话,则可以通过流的方式存储

File f=new File(Environment.getExternalStorageDirectory(), fn);
fos=new FileOutputStream(f);
bitmap.compress(CompressFormat.PNG, 100, fos);  
fos.flush();

由于网络存储和数据库存储涉及的知识点比较多,下篇博客在详细说明。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22060次
    • 积分:720
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:1篇
    • 译文:0篇
    • 评论:11条
    文章分类