小工具知识网

当前位置: 首页 > 行业知识 > 基于Android studio学习安卓之数据存储

行业知识

基于Android studio学习安卓之数据存储

2026-11-06 23:13:09 来源:互联网转载

基于Android studio学习安卓之数据存储

文章目录

  • 基于Android studio学习安卓之数据存储
    • 前言
    • 一、SharedPreferences
      • 1. 什么是SharedPreferences?
      • 2. SharedPreferences的特点
      • 3. 使用方式
      • 4. 使用场景
      • 5.总结
      • 二、数据库存储
        • 1.SQLite数据库
          • 1.1. 为什么使用?
          • 1.2. 数据存储的基本流程
            • 1. **创建数据库和表**
            • 2. **实现数据库操作类**
            • 3. **插入数据**
            • 4. **查询数据**
            • 5. **更新和删除数据**
            • 6. **关闭数据库连接**
            • 示例代码(如下):
            • 2.网络数据库
              • 2.1 使用场景
              • 2.2 数据存储的要点
              • 2.3 示例代码
              • 三、文件存储
                • 3.1**应用场景**
                • 3.2**优势**
                • 四、ContentProvider
                  • 4.1. ContentProvider的基本组件
                  • 4.2. 创建ContentProvider
                  • 4.3. 使用ContentProvider
                  • 4.4. 安全性和权限
                  • 4.5. 示例场景
                  • 4.6. 注意事项
                  • 五、总结

                    前言

                    在移动应用开发中,数据存储是一个非常重要且必不可少的技术。无论是保存用户的信息、记录应用的状态,还是缓存网络请求的数据,数据存储都是必须处理的需求。而在安卓开发中,我们有许多选项可以选择来进行数据存储。下面我们介绍几种安卓的常见的数据存储方式,包括Shared Preferences、数据库存储等。

                    一、SharedPreferences

                    1. 什么是SharedPreferences?

                    在Android中,SharedPreferences是一种轻量级的存储机制,用于存储和检索键值对数据。它提供了一种简单的方法来保存应用程序的持久化数据,包括用户首选项、设置信息、应用程序状态等。

                    SharedPreferences使用一个XML文件来存储数据,在应用程序的/data/data//shared_prefs/目录下创建一个以包名为前缀的XML文件。每个文件都包含一组键值对数据,并且可以通过键来读取、写入、更新和删除数据。

                    2. SharedPreferences的特点

                    1. 简单易用:SharedPreferences提供了一组简单的API来读取和写入数据,非常容易使用。

                    2. 轻量级:SharedPreferences适用于存储少量的简单数据,不适用于存储大量数据。

                    3. 持久化存储:SharedPreferences存储的数据在应用程序关闭后依然可用,即使应用程序被杀***,数据也不会丢失。

                    4. 跨进程访问:SharedPreferences可以被同一个应用程序的不同组件访问,也可以被不同应用程序的组件访问,实现数据共享。

                    3. 使用方式

                    使用SharedPreferences可以实现许多功能,比如存储用户的登录状态、保存用户的设置选项、记录应用程序的使用次数等。通过调用SharedPreferences对象的方法,可以实现数据的存储和检索操作。

                    例如,要存储一个键值对数据,可以使用以下代码:

                    // 创建一个名为"myPrefs"的SharedPreferences实例,用于存储私有数据  SharedPreferences sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);// 获取一个SharedPreferences.Editor对象,用于编辑数据SharedPreferences.Editor editor = sharedPreferences.edit();// 使用editor对象将key值存储到SharedPreferences中editor.putString("key", "value");// 应用更改,将编辑后的数据保存到SharedPreferences中editor.apply();

                    要检索一个存储的数据,可以使用以下代码:

                    // 获取名为"myPrefs"的SharedPreferences实例SharedPreferences sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE);// 从SharedPreferences中获取与给定key关联的值,如果找不到则返回第二个参数指定的默认值(空字符串)String value = sharedPreferences.getString("key", defaultValue);

                    其中,"myPrefs"是SharedPreferences的名称,可以自定义,Context.MODE_PRIVATE指定了访问权限。

                    注意:如果不是在活动中使用,需将 getSharedPreferences("myPrefs", Context.MODE_PRIVATE) 改为context.getSharedPreferences("myPrefs", Context.MODE_PRIVATE) ,其中 context 为上下文。

                    4. 使用场景

                    1. 需要登录的应用,在登录后可将用户的登录信息存储在SharedPreferences中。
                    2. 需要通过接口请求且万年不变的数据。
                    3. …(待补充)

                    5.总结

                    SharedPreferences是一种方便、灵活的存储机制,用于持久化存储应用程序的数据。它在Android开发中被广泛应用,提供了一种简单的方法来保存和读取用户数据。

                    二、数据库存储

                    1.SQLite数据库

                    1.1. 为什么使用?

                    在Android开发中,基于SQLite数据库进行数据存储是一种常见且有效的做法。SQLite是一个轻量级的关系型数据库管理系统,它不需要独立的服务器进程或操作系统支持,可以嵌入到应用程序中,非常适合移动应用场景。

                    1.2. 数据存储的基本流程
                    1. 创建数据库和表

                    首先,你需要在Android应用中创建一个SQLite数据库,并定义所需的表结构。这通常在应用的首次运行时完成。你可以使用SQLiteDatabase类的openOrCreateDatabase方法来创建或打开一个数据库,然后使用execSQL方法来执行SQL语句创建表。

                    2. 实现数据库操作类

                    为了更方便地管理数据库操作,你可以创建一个数据库操作类(通常继承自SQLiteOpenHelper),该类负责数据库的创建、版本管理和升级。在这个类中,你可以重写onCreate和onUpgrade方法来定义数据库的创建和升级逻辑。

                    3. 插入数据

                    使用ContentValues类来封装要插入的数据,然后通过SQLiteDatabase的insert方法将数据插入到指定的表中。

                    4. 查询数据

                    使用SQLiteDatabase的query方法或rawQuery方法执行SQL查询语句,获取查询结果。查询结果通常是一个Cursor对象,你可以遍历这个对象来获取查询到的数据。

                    5. 更新和删除数据

                    使用SQLiteDatabase的update方法来更新表中的数据,使用delete方法来删除数据。

                    6. 关闭数据库连接

                    在完成数据库操作后,记得调用close方法来关闭数据库连接,释放资源。

                    示例代码(如下):

                    这个MyDatabaseHelper类是一个典型的SQLite数据库操作帮助类,它封装了创建表、插入数据、查询数据、更新数据和删除数据的基本操作。通过继承SQLiteOpenHelper,它提供了数据库创建和版本管理的功能。在实际应用中,你可以根据具体需求进一步扩展这个类,添加更多的数据库操作方法和逻辑。

                    import android.content.ContentValues;  import android.content.Context;  import android.database.Cursor;  import android.database.sqlite.SQLiteDatabase;  import android.database.sqlite.SQLiteOpenHelper;   // 定义一个帮助类,用于管理SQLite数据库  public class MyDatabaseHelper extends SQLiteOpenHelper {      // 定义数据库文件名     private static final String DATABASE_NAME = "my_database.db";     // 定义数据库版本,用于升级管理     private static final int DATABASE_VERSION = 1;      // 定义表名     private static final String TABLE_NAME = "my_table";     // 定义列名:主键ID     private static final String COLUMN_ID = "_id";     // 定义列名:姓名     private static final String COLUMN_NAME = "name";     // 定义列名:年龄     private static final String COLUMN_AGE = "age";      // 创建表的SQL语句     private static final String CREATE_TABLE_SQL = "CREATE TABLE " + TABLE_NAME + " (" +             COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + // 定义ID列为主键,并自动增长             COLUMN_NAME + " TEXT NOT NULL, " + // 定义name列,不允许为空,类型为TEXT             COLUMN_AGE + " INTEGER NOT NULL);"; // 定义age列,不允许为空,类型为INTEGER      // 构造函数,传入上下文对象     public MyDatabaseHelper(Context context) {         super(context, DATABASE_NAME, null, DATABASE_VERSION);     }      // 当数据库首次创建时调用此方法     @Override     public void onCreate(SQLiteDatabase db) {         db.execSQL(CREATE_TABLE_SQL); // 执行SQL语句创建表     }      // 当数据库版本升级时调用此方法     @Override     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {         // 这里可以添加数据库升级逻辑,例如删除旧表、创建新表等         // 暂时留空     }      // 插入数据到表中     public void insertData(String name, int age) {         SQLiteDatabase db = getWritableDatabase(); // 获取可写的数据库实例         ContentValues values = new ContentValues(); // 创建一个ContentValues对象用于封装要插入的数据         values.put(COLUMN_NAME, name); // 将姓名数据放入ContentValues         values.put(COLUMN_AGE, age); // 将年龄数据放入ContentValues         db.insert(TABLE_NAME, null, values); // 执行插入操作         db.close(); // 关闭数据库连接     }      // 查询表中所有数据     public Cursor queryData() {         SQLiteDatabase db = getReadableDatabase(); // 获取可读的数据库实例         Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); // 执行查询操作,返回Cursor对象         return cursor; // 返回查询结果     }      // 更新表中指定ID的数据     public void updateData(int id, String name, int age) {         SQLiteDatabase db = getWritableDatabase(); // 获取可写的数据库实例         ContentValues values = new ContentValues(); // 创建一个ContentValues对象用于封装要更新的数据         values.put(COLUMN_NAME, name); // 将新的姓名数据放入ContentValues         values.put(COLUMN_AGE, age); // 将新的年龄数据放入ContentValues         db.update(TABLE_NAME, values, COLUMN_ID + " = ?", new String[]{String.valueOf(id)}); // 执行更新操作,根据ID匹配记录         db.close(); // 关闭数据库连接     }      // 删除表中指定ID的数据     public void deleteData(int id) {         SQLiteDatabase db = getWritableDatabase(); // 获取可写的数据库实例         db.delete(TABLE_NAME, COLUMN_ID + " = ?", new String[]{String.valueOf(id)}); // 执行删除操作,根据ID匹配记录         db.close(); // 关闭数据库连接     }  }

                    2.网络数据库

                    2.1 使用场景

                    Android基于网络数据库方式进行数据存储是一种常见的做法,尤其是在需要实现数据共享、实时更新、高可用性、或需要大规模数据存储和处理时。这种方式通常涉及将数据存储在远程服务器上,并通过网络API与Android应用进行交互。

                    2.2 数据存储的要点
                    1. 选择合适的网络数据库服务

                      首先,你需要选择一个网络数据库服务。常见的选择包括Firebase Realtime Database、MongoDB Realm、Amazon DynamoDB、Parse Server(一个开源的Parse替代方案)以及自己搭建的服务器和数据库。

                    2. 创建数据库和API

                      数据库设计:根据你的应用需求设计数据库结构,包括表、字段、索引等。

                      API开发:开发RESTful API或GraphQL API,用于Android应用与数据库之间的通信。这些API应该提供基本的CRUD(创建、读取、更新、删除)操作。

                    3. 在Android应用中集成网络请求库

                      Android应用中通常使用网络请求库来发送HTTP请求和接收响应。常见的库包括Retrofit、OkHttp、Volley等。这些库可以简化网络请求的编写和处理。

                    4. 实现数据同步和缓存

                      数据同步:确保Android应用中的数据与网络数据库中的数据保持同步。这通常涉及到监听数据变化(如使用WebSocket或长轮询),并在数据变化时更新本地数据。

                      缓存:为了提高性能和用户体验,可以在本地缓存一些常用或最近访问的数据。这样,即使在网络不可用的情况下,用户也能访问一些基本功能。

                    5. 处理安全性和隐私

                      加密:使用HTTPS来加密网络传输的数据,以防止数据在传输过程中被截获。

                      身份验证和授权:实现用户身份验证和授权机制,确保只有授权的用户才能访问和修改数据。

                      数据脱敏:不要在客户端存储敏感信息,如密码、信用卡号等。即使需要存储这些信息,也应该使用加密和哈希技术进行处理。

                    2.3 示例代码
                    // 创建一个Retrofit实例  Retrofit retrofit = new Retrofit.Builder()      .baseUrl("https://api.example.com/")      .build();    // 创建API服务的实例  MyApiService myApiService = retrofit.create(MyApiService.class);    // 调用API方法获取数据  Call call = myApiService.getData();  call.enqueue(new Callback() {      @Override      public void onResponse(Call call, Response response) {          if (response.isSuccessful()) {              // 处理响应数据              List dataList = response.body();          } else {              // 处理错误          }      }        @Override      public void onFailure(Call call, Throwable t) {          // 处理网络请求失败的情况      }  });

                    注意事项:

                    1.网络状态检测:在应用中进行网络状态检测,以便在网络不可用时提供适当的反馈或备选方案。

                    2.错误处理和日志记录:确保妥善处理网络请求中可能出现的错误,并记录相关日志以便后续调试和分析。

                    3.性能和资源管理:优化网络请求的性能和资源管理,避免不必要的请求和内存泄漏。

                    三、文件存储

                    需配合网络请求完成文件的下载,并进行保存。

                    3.1应用场景

                    适用于存储大量数据,如用户生成的内容(图片、音频、视频、文档等),或者需要长时间保存的数据。

                    3.2优势

                    文件存储提供了更大的灵活性和存储空间。开发者可以自定义文件格式和内容,并且文件可以保存在设备的内部存储或外部存储中。

                    四、ContentProvider

                    Android中的ContentProvider是一种特殊的数据存储和共享机制,它允许不同的应用程序之间安全地访问和修改数据。通过使用ContentProvider,一个应用程序可以将其私有数据暴露给其他应用程序,而无需暴露其数据的底层实现细节。这种机制在Android系统中广泛应用,尤其是在系统级服务和第三方应用之间共享数据时。

                    4.1. ContentProvider的基本组件

                    1. URI:ContentProvider使用URI(统一资源标识符)来标识其管理的数据。URI提供了一种标准化的方式来访问数据,类似于网络上的网址。
                    2. 数据模型:ContentProvider定义了自己的数据模型,这通常是一组表,用于存储和管理数据。这些表可以存储在SQLite数据库中,也可以以其他形式存在。
                    3. 查询方法:ContentProvider提供了一组标准的查询方法,如query(), insert(), update(), 和 delete(),用于对其数据进行操作。

                    4.2. 创建ContentProvider

                    要创建ContentProvider,你需要继承android.content.ContentProvider类,并实现其必要的方法。以下是一些关键步骤:

                    1. 定义URI:为你的ContentProvider定义URI模式,以便其他应用程序可以访问你的数据。
                    2. 实现查询方法:根据URI和查询参数,实现数据的查询、插入、更新和删除操作。
                    3. 注册ContentProvider:在你的AndroidManifest.xml文件中注册你的ContentProvider,以便系统和其他应用程序可以识别和访问它。

                    4.3. 使用ContentProvider

                    其他应用程序可以通过ContentResolver类来访问你的ContentProvider。ContentResolver提供了一个统一的接口,用于与ContentProvider进行交互。以下是使用ContentProvider的一般步骤:

                    1. 获取ContentResolver实例:通过调用getContext().getContentResolver()获取ContentResolver实例。
                    2. 构建URI:根据你的需求构建适当的URI。
                    3. 执行查询:使用ContentResolver的query(), insert(), update(), 或 delete()方法来执行数据操作。

                    4.4. 安全性和权限

                    ContentProvider提供了一种安全的机制来共享数据,因为它允许你定义访问控制。你可以通过AndroidManifest.xml文件中的元素来定义权限,并在ContentProvider的URI上设置这些权限。这样,只有拥有适当权限的应用程序才能访问你的数据。

                    4.5. 示例场景

                    1. 系统级服务:如联系人、媒体库等系统级服务通常使用ContentProvider来暴露其数据给其他应用程序。
                    2. 第三方应用:第三方应用也可以使用ContentProvider来共享其数据,如共享用户生成的内容、配置文件等。
                    3. 跨应用数据同步:通过ContentProvider,不同的应用程序可以协同工作,共享和同步数据。

                    4.6. 注意事项

                    1. 性能优化:ContentProvider的查询操作可能会影响性能,特别是在处理大量数据时。因此,应优化查询逻辑,避免不必要的数据库操作。
                    2. 错误处理:在实现ContentProvider时,应妥善处理各种异常和错误情况,确保数据的完整性和一致性。
                    3. 兼容性和版本差异:不同版本的Android系统可能对ContentProvider的实现有所差异。因此,在开发过程中应注意兼容性问题,并测试不同版本的系统。

                    五、总结

                    1. SharedPreferences:

                      应用场景

                      适用于存储少量的简单数据,如应用程序的配置信息(如是否打开音效、主题设置等)或用户的登录状态等。

                      优势

                      轻量级存储,基于XML文件存储key-value键值对,读取和写入操作相对简单快速。

                    2. 文件存储:

                      应用场景

                      适用于存储大量数据,如用户生成的内容(图片、音频、视频、文档等),或者需要长时间保存的数据。

                      优势

                      文件存储提供了更大的灵活性和存储空间。开发者可以自定义文件格式和内容,并且文件可以保存在设备的内部存储或外部存储中。

                    3. SQLite数据库存储:

                      应用场景

                      适用于需要结构化存储大量数据,并且需要进行复杂查询操作的场景,如用户信息、订单数据等。

                      优势

                      SQLite是一个轻量级的关系型数据库,提供了强大的查询和数据处理能力,适合处理大量数据,并且支持加密,提供数据安全性。

                    4. ContentProvider:

                      应用场景

                      适用于需要在多个应用程序之间共享数据的情况,如联系人信息、日历事件等。

                      优势

                      ContentProvider提供了一种标准化的数据共享机制,允许不同的应用程序安全地访问和修改共享数据。

                    5. 网络存储:

                      应用场景

                      适用于需要将数据存储在远程服务器上的情况,如用户数据备份、云存储等。

                      优势

                      网络存储可以实现数据的远程访问和共享,同时提供了更高的数据安全性(通过加密和身份验证等机制)和可靠性(通过数据备份和恢复机制)。

上一篇:爬虫学习笔记-requests爬取NBA得分榜

下一篇:云服务器异常监测怎么解除?