博客
关于我
Android开发-API指南-数据存储
阅读量:484 次
发布时间:2019-03-06

本文共 4022 字,大约阅读时间需要 13 分钟。

Android应用数据存储方案详解

Android作为移动操作系统,为应用程序提供了多种数据存储方式。选择合适的存储方案需要根据应用需求、数据的私有性以及存储空间等多方面因素进行权衡。本文将详细介绍Android的存储选项,并提供实际应用示例。

存储方式概述

Android提供了多种存储方式,主要包括以下几种:

  • Shared Preferences:用于简单数据的存储,支持键-值对形式,适合持久化保存非结构化数据。
  • 内部存储:将数据保存在应用程序的私有目录中,适合需要高安全性的数据存储。
  • 外部存储:将数据保存在设备的共享存储介质中,适合需要跨应用访问的公共数据。
  • SQLite数据库:用于结构化数据的存储,支持复杂的查询操作。
  • 网络连接:通过自建Web服务实现数据的远程存储和读取。

在本文中

本文将从以下几个方面详细阐述Android的存储方案:

  • Shared Preferences的使用方法
  • 内部存储的文件操作
  • 外部存储的权限申请与文件操作
  • SQLite数据库的创建与使用
  • 数据库调试工具的使用
  • 网络连接的实现
  • 使用Shared Preferences

    Shared Preferences类提供了一种简单的数据存储方式,适合存储简单类型的键-值对数据。以下是使用Shared Preferences的基本步骤:

    获得SharedPreferences对象

    可以通过以下两种方式获取SharedPreferences对象:

  • 通过getSharedPreferences方法

    SharedPreferences settings = getSharedPreferences("MyPrefsFile", Context.MODE_PRIVATE);
    • 第一个参数是文件名,第二个参数是模式,设置为Context.MODE_PRIVATE表示只在应用内部访问。
  • 通过getSharedPreferences方法(默认文件名)

    SharedPreferences settings = getSharedPreferences(Context.MODE_PRIVATE);
    • 如果不需要指定文件名,可以使用默认文件名。
  • 写入数据

    通过SharedPreferences.Editor进行修改:

    SharedPreferences settings = getSharedPreferences("MyPrefsFile", Context.MODE_PRIVATE);SharedPreferences.Editor editor = settings.edit();editor.putBoolean("silentMode", mSilentMode);editor.commit();

    读取数据

    通过SharedPreferences对象的方法读取数据:

    boolean silent = settings.getBoolean("silentMode", false);

    使用内部存储

    内部存储是Android提供的安全存储方式,适合需要持久化保存的数据。以下是通过内部存储保存文件的基本步骤:

    打开文件输出流

    String FILENAME = "hello_file";String string = "hello world!";FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);fos.write(string.getBytes());fos.close();

    读取文件

    FileInputStream fis = openFileInput(FILENAME);byte[] data = new byte[100];int len = fis.read(data);if (len > 0) {    String str = new String(data, 0, len);    // 处理读取到的数据}fis.close();

    常用方法

    • getFilesDir():获取应用程序内部存储目录的绝对路径。
    • getDir():打开或创建内部存储目录。
    • delete():删除内部存储中的文件。
    • fileList():获取内部存储中已保存的文件列表。

    使用外部存储

    外部存储是Android设备提供的共享存储介质,适合需要跨应用访问的数据。以下是使用外部存储的基本步骤:

    检查外部存储可用性

    public boolean isExternalStorageWritable() {    String state = Environment.getExternalStorageState();    return Environment.MEDIA_MOUNTED.equals(state);}

    保存可共享文件

    File file = new File(Environment.getExternalStoragePublicDirectory(        Environment.DIRECTORY_PICTURES), "MyAlbum");if (!file.mkdirs()) {    Log.e(LOG_TAG, "Directory not created");}

    保存应用程序私有文件

    File file = new File(getExternalStorageDirectory(), "app_private_dir");if (!file.mkdirs()) {    Log.e(LOG_TAG, "Directory not created");}

    外部存储权限申请

    在Android 4.4及以上版本,读写外部存储不需要申请权限。以下是权限声明示例:

    使用数据库

    Android支持SQLite数据库,适合需要结构化存储的数据。以下是创建和使用SQLite数据库的步骤:

    创建数据库帮助类

    public class DictionaryOpenHelper extends SQLiteOpenHelper {    private static final int DATABASE_VERSION = 2;    private static final String DICTIONARY_TABLE_NAME = "dictionary";    private static final String DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME +            "(" + KEY_WORD + " TEXT, " + KEY_DEFINITION + " TEXT);";    DictionaryOpenHelper(Context context) {        super(context, DATABASE_NAME, null, DATABASE_VERSION);    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(DICTIONARY_TABLE_CREATE);    }}

    使用数据库

    SQLiteDatabase db = SQLiteDatabase.openDatabase(DATABASE_NAME, null, 4);db.execSQL("INSERT INTO dictionary VALUES (?, ?)", new Object[]{    "word1", "definition1"});

    数据库调试

    Android SDK提供了sqlite3工具,用于数据库调试。通过这个工具可以执行SQL命令,浏览数据表,进行数据库维护。

    使用网络连接

    通过网络连接可以将数据存储到远程Web服务中。以下是使用HttpURLConnection的示例:

    public class WebDataSaver {    private static final String URL = "http://example.com/data";    public void saveData(String data) {        try {            HttpURLConnection connection = (HttpURLConnection) new URL(URL).openConnection();            connection.setRequestMethod("POST");            connection.setDoOutput(true);            OutputStream os = connection.getOutputStream();            os.write(data.getBytes());            os.close();            connection.getInputStream();        } catch (IOException e) {            Log.e(LOG_TAG, "Web data save failed: " + e.getMessage());        }    }}

    结论

    通过以上方法,开发者可以根据具体需求选择合适的数据存储方式。在实际应用中,建议根据数据的私有性、存储空间需求以及应用的性能要求,选择最合适的存储方案。

    转载地址:http://jpufz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现memset函数功能(附完整源码)
    查看>>
    Objective-C实现merge insertion sort合并插入排序算法(附完整源码)
    查看>>
    Objective-C实现merge sort归并排序算法(附完整源码)
    查看>>
    Objective-C实现mergesort归并排序算法(附完整源码)
    查看>>
    Objective-C实现MidpointIntegration中点积分算法 (附完整源码)
    查看>>
    Objective-C实现miller rabin米勒-拉宾素性检验算法(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现min cost string conversion最低成本字符串转换算法(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现minimum coin change最小硬币找零算法(附完整源码)
    查看>>
    Objective-C实现minimum cut最小切割流算法(附完整源码)
    查看>>
    Objective-C实现minimum partition最小分区算法(附完整源码)
    查看>>
    Objective-C实现Minimum Priority Queu最小优先级队列算法(附完整源码)
    查看>>
    Objective-C实现Minimum Vertex Cover最小顶点覆盖算法(附完整源码)
    查看>>
    Objective-C实现MinimumCostPath最小成本路径算法(附完整源码)
    查看>>
    Objective-C实现min_heap最小堆算法(附完整源码)
    查看>>
    Objective-C实现mobius function莫比乌斯函数算法(附完整源码)
    查看>>