热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android应用开发中数据的保存方式总结

这篇文章主要介绍了Android应用开发中数据的保存方式总结,包括对ROM、SD卡、SharedPreference这三种方式实现的核心代码的精选,需要的朋友可以参考下

一、保存文件到手机内存

/**
   * 保存数据到手机rom的文件里面.
   * @param context 应用程序的上下文 提供环境
   * @param name 用户名
   * @param password 密码
   * @throws Exception
   */
public static void saveToRom(Context context, String name , String password) throws Exception{
    //File file = new File("/data/data/com.itheima.login/files/info.txt");
    File file = new File(context.getFilesDir(),"info.txt");//该文件在data下的files文件夹下getCacheDir()在cache文件夹下 文件大小不要超过1Mb
    FileOutputStream fos = new FileOutputStream(file);
    String txt = name+":"+password;
    fos.write(txt.getBytes());
    fos.flush();
    fos.close();
  }
/**
   * 获取保存的数据
   * @param context
   * @return
   */
public static Map getUserInfo(Context context) {
    File file = new File(context.getFilesDir(),"info.txt");
    try {
      FileInputStream fis = new FileInputStream(file);
      //也可直接读取文件String result = StreamTools.readFromStream(fis);
      BufferedReader br = new BufferedReader(new InputStreamReader(fis));
      String str = br.readLine();
      String[] infos = str.split(":");
      Map map = new HashMap();
      map.put("username", infos[0]);
      map.put("password", infos[1]);
      return map;
    } catch(Exception e) {

      e.printStackTrace();
      return null;
    }

  }
//最后可以直接调用上面的方法读取信息
Map map = getUserInfo(this);
If(map!=null){
Textview.setText(map.get(“username”));
}

二、保存文件到SD卡
获取手机sd空间的大小:

File path = Environment.getExternalStorageDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long totalBlocks = stat.getBlockCount();
    long availableBlocks = stat.getAvailableBlocks();
    long totalSize = blockSize*totalBlocks;
    long availSize = blockSize * availableBlocks;

    String totalStr = Formatter.formatFileSize(this,totalSize);
    String availStr = Formatter.formatFileSize(this, availSize);
    tv.setText("总空间"+totalStr+"\n"+"可用空间"+availStr);

加入写外部存储的权限:



public static void save(String name ,String password) throws Exception{
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(Environment.getExternalStorageDirectory(),"info.txt");
//也可直接写/sdcard/info.txt 先判断sd卡是否存在
    FileOutputStream fos = new FileOutputStream(file);
    String txt = name+":"+password;
    fos.write(txt.getBytes());
    fos.flush();
    fos.close();
// 使用RandomAccessFile像文件追加内容FileOutputStream会把原有的文件内容清空
//RandomAccessFile raf = new RandomAccessFile(file,"rw");
//raf.seek(file.length()); 将文件指针移动到最后
//raf.write(name.getBytes()+password.getBytes());
//raf.close();
  }
}

//读取文件 加入读取权限
public static String read(){
      try {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
          File sdcardDir = Environment.getExternalStorageDirectory();
          FileInputStream fis = new FileInputStream(sdcardDir.getCanonicalPath() + "info.txt");
          BufferedReader br = new BufferedReader(new InputStreamReader(fis));
          StringBuilder sb = new StringBuilder("");
          String line = null;
          while ((line = br.readLine())!= null){
            sb.append(line);
          }
          return sb.toString();
        }
      } catch (Exception e) {

        e.printStackTrace();
      }
      return null;
    }

三、Sharedpreferences的使用
SharedPreference是开发中常用的一种存储方式,主要存储一些系统不变的参数如是否是第一次进入应用程序等,通过键值对的方式进行存储
可以存储的类型:booleans, floats, ints, longs,strings.

getSharedPreferences() - 存储多个参数
getPreferences() - 仅存储一个参数并且不需要指定名字(key)
写入的步骤:

SharedPreferences调用edit()得到一个Editor对象
使用 putBoolean() and putString()添加值
提交事务完成存储
读取时:只需要调用SharedPreferences的getBoolean() and getString()

下面是示例代码:

public class MySharedPreference {
  private Context context;
  private SharedPreferences sp ;
  private Editor edit;
  public MySharedPreference(Context context){
    this.cOntext= context;
  }
  public boolean saveMessage(String name,String pwd){
    boolean flag = false;
     sp = context.getSharedPreferences("userInfo",Context.MODE_PRIVATE);
     //MODE定义了访问的权限现在是本应用可以访问
    edit = sp.edit();
    edit.putString("name", name);
    edit.putString("pwd", pwd);
    flag = edit.commit();//提交事务将数据持久化到存储器中
    return flag;

  }
  public Map getMessage(){
    Map map = new HashMap();
    sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
    String name = sp.getString("name", "");
    String pwd = sp.getString("pwd", "");
    map.put("name", name);
    map.put("pwd",pwd);
    return map;

  }

}


推荐阅读
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文探讨了如何在不重新加载URL的情况下,触发WebView的PictureListener.onNewPicture()方法,以实现页面的重新绘制或渲染。 ... [详细]
author-avatar
凡妮04
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有