安卓:可选的存储方式

在昇腾910B上,用kubeadm快速拉起一个双节点K8s集群(保姆级避坑指南) 本文详细介绍了在昇腾910B服务器上使用kubeadm快速搭建双节点Kubernetes集群的完整流程,包括环境准备、容器运行时配置、kubeadm初始化、节点加入与网络插件部署等关键步骤,特别针对ARM架构和昇腾芯片提供了优化配置和避坑指南。 阅读详情

Storage Options 可选的存储方式

STORAGE 快速预览

  • Use Shared Preferences for primitive data
  • Use internal device storage for private data
  • Use external storage for large data sets that are not private
  • Use SQLite databases for structured storage

在本文档中

  1. Using Shared Preferences
  2. Using the Internal Storage
  3. Using the External Storage
  4. Using Databases
  5. Using a Network Connection

另请参阅

  1. Content Providers and Content Resolvers

安卓提供了几种保存永久用户数据的方式。选择那种方式取决于你的实际需要:你想要似有还是和其他应用程序分享,以及你的数据需要的空间。

几种数据存储方式:

Shared Preferences
以键值对的方式存储似有原始数据。
Internal Storage
存储似有数据到设备存储器中。
External Storage
存储公有数据到可分享的外部存储器中。
SQLite Databases
存储结构化数据到私有数据库中。
Network Connection
使用你自有的网络服务存储数据到网络上。

安卓允许你使用 【内容提供者】来暴露数据,也包括私有数据。

Using Shared Preferences


SharedPreferences类提供了一个通用的框架允许你存储和检索原始数据类型的键值对。你可以使用SharedPreferences来保存任何原始数据:booleans, floats, ints, longs, 和 strings.数据通过用户序列保存(即使你的应用程序被杀死)。

为了获得SharedPreferences对象,可使用下面的一个或者两个方法:

  • 如果你需要多个preferences文件标识符,使用getSharedPreferences()。通过指定的第一个参数来标识名称。
  • 如果在Activity中仅使用一个preferences文件,使用getPreferences() 。不支持名称,只能使用一个。

写入值:

  1. 调用edit()来取得SharedPreferences.Editor对象。
  2. 使用方法诸如putBoolean() 和putString()等方法来添加值。
  3. 使用commit()来提交新值。

为了读取值,使用SharedPreferences 的方法,例如getBoolean() and getString()

在计算器中静音键模式的preference保存例子:

public class Calc extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // 存储 preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // 我们需要一个 Editor 对象来执行 preference 改变.
      // 所有这些对象都来自 android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}

Using the Internal Storage 使用内部存储器


你可以直接在设备的内部存储器上保存文件。默认情况下保存在内部存储器的数据是私有的外部应用程序不可访问他们。当用户卸载你的应用程序时,这些文件将被移除。

创建和写一个私有文件于内部存储器上:

  1. 使用文件名和操作模式来调用openFileOutput() 。这将返回一个FileOutputStream对象。
  2. 使用write()来向文件写入数据。
  3. 使用close()来关闭流。

例子:

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

MODE_PRIVATE将会创建(或者同名覆盖)并使其对于你的应用程序而言是私有的。其他可用模式:MODE_APPEND, MODE_WORLD_READABLE, and MODE_WORLD_WRITEABLE.

从内部存储器读数据:

  1. 以读取文件的名字调用openFileInput()并返回FileInputStream对象                                                                                                            (函数原型:public abstract FileInputStream openFileInput (String name))
  2. 使用read()从文件读取字节
  3. 使用close()关闭流。

提示:如果你想在编译时保存静态文件,将文件保存在你工程下的res/raw/目录中。你可以使用openRawResource()打开它,传递R.raw.<filename>资源ID。这个方法返回一个你可用于读取的文件的InputStream(但你无法向原始文件中写入)

Saving cache files 保存缓存文件

如果你想要缓存一些数据,而不是永久储存他们,你应该使用getCacheDir()来打开代表内部存储临时文件的目录的File对象。

当你的设备内部存储空间不足时,安卓可能会删除这些缓存数据来回收空间。然而,你也不应该指望系统会为你清除这些文件。你应该自己维护这些缓存文件在合理的范围内,例如1MB。当用户删除你的应用程序时,这些文件将被移除。

Other useful methods  其他有用的方法

getFilesDir()
获得保存内部文件所在目录的文件系统的绝对路径。
getDir()

在内部存储空间中创建(或者打开一个已经存在的)目录。
deleteFile()

删除保存在内部储存中的一个文件
fileList()

返回你应用程序保存的当前文件列表

Using the External Storage  使用外部存储器


每一个安卓兼容的设备都支持可分享你保存的文件的“外部存储器”。它可以是可移动的存储媒介(例如SD 卡)或是内部(不可移动)的存储器。保存在外部存储器上的文件是全局可读的,并且在启用USB大存储来向电脑传输文件时它是可以被修改的。

设备使用部分内部存储作为外部存储之外还提供SD卡插槽。在这种情况下,SD卡不是外部存储的一部分,你的应用程序不能访问它。

警告:如果用户挂载外部存储到电脑或者移除媒介,外部存储器将不可用,并且也没有强制的安全来保存在外部存储上,所有的应用程序能够读写外部存储器上的文件,用户也可以移除他们。

Checking media availability  检查媒介可用性

在外部存储器上做任何事情之前,你应该总是调用 来检查媒介是否可用。媒介可能挂载到电脑上,丢失,只读或者在别的什么状态。下面的例子告诉你该如何做:

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
    // 我们可以进行读写媒介
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // 我们只能读媒介
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} else {
    // 这儿存在一些错误,处于其他的状态,我们所需要知道的,是我们无法进行读写操作
    mExternalStorageAvailable = mExternalStorageWriteable = false;
}

getExternalStorageState() 方法返回了你可能想要知道的状态,例如媒介正被分享,完全丢失了,或者被不正确的移除了等等。当应用程序访问媒介时,你可以使用状态来告知用户更多的信息。

Accessing files on external storage  在外部存储器上访问文件

如果你的API为8或者更高,使用getExternalFilesDir()来打开代表你存放文件的外部储存器目录。这个方法取得一个 类型参数,来指定你想要访问的子目录,例如DIRECTORY_MUSIC 和 DIRECTORY_RINGTONES(传递null来接收应用程序根目录)。这个方法会在合适的时候创建目录。通过指定目录类型,你确定媒介是合适的。如果用户删除应用程序,所有它的内容都会被删除。

如果是API7或者更低,使用getExternalStorageDirectory()来打开代表外部根目录的File。你应该像下面这样写入数据:

/Android/data/<package_name>/files/

<package_name>是JAVA风格的包名,如"com.example.android.app"。如果用户在API8或者更高API删除你的应用程序,所有内容将被删除。

Saving files that should be shared  保存需要被共享的文件

如果你想要保存文件,他们是与你的应用程序无关的,你应该保存在外部存储器的公有目录中。这些目录处于外部存储器的根目录下,如Music/, Pictures/, Ringtones/等等。

在API 8或者更高,使用getExternalStoragePublicDirectory()传递你想指定的参数,例如DIRECTORY_MUSIC,DIRECTORY_PICTURES, DIRECTORY_RINGTONES等等。这个方法在需要时将会创建目录。

如果你使用API 7或者更低,使用getExternalStoragePublicDirectory()来打开代表根目录的File。然后保存共享的文件到下面的目录中:

  • Music/ - Media scanner classifies all media found here as user music. 用户音乐
  • Podcasts/ - Media scanner classifies all media found here as a podcast. 播客
  • Ringtones/ - Media scanner classifies all media found here as a ringtone. 手机铃音
  • Alarms/ - Media scanner classifies all media found here as an alarm sound. 闹铃声音
  • Notifications/ - Media scanner classifies all media found here as a notification sound.  通知声音
  • Pictures/ - All photos (excluding those taken with the camera). 图片
  • Movies/ - All movies (excluding those taken with the camcorder).  视频
  • Download/ - Miscellaneous downloads. 下载

Saving cache files  保存缓存文件

如果你的API为8或者更高,使用getExternalFilesDir()来打开代表你存放文件的外部储存器目录。删除程序时,他们会被删除,但是在程序生命周期中,如果你不删除他们,他们也不会自动删除。你应该管理他们,删除不用的。

如果你使用API 7或者更低,使用getExternalStoragePublicDirectory()来打开代表根目录的File,然后写到下面的目录中:

/Android/data/<package_name>/cache/

 <package_name> 是Java-style 包名, 例如 "com.example.android.app".

Using Databases 使用数据库


安卓提供了对于SQLite数据库完全的支持。你创建的数据库可以被你应用程序中的任何类通过名称访问,但在应用程序外部是不可以的。

一种推荐的创建 SQLite数据库的方法是,创建SQLiteOpenHelper子类对象,并重写它的onCreate()方法,在其中你可以执行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);
    }
}

使用你定义的结构体你可以获得SQLiteOpenHelper实现的实例。为了读写数据库,分别调用 getWritableDatabase() ,getReadableDatabase() 方法。他们都返回代表数据库和提供SQLite方法的 SQLiteDatabase对象

所有的SQLite查询将返回Cursor 。Cursor是一种机制,你可以导航结果然后获得行与列。你可以使用 SQLiteDatabasequery()执行查询,它接受一些参数: 查询表名, the projection, 选择参数, columns, 组, 以及其他。对于更加复杂的查询,如包含列别称的查询,你应该使用SQLiteQueryBuilder,它提供了一些便捷方法来构建查询。

SQLite使用的例子,查阅Note Pad and Searchable Dictionary应用。

Database debugging 数据库除错

安卓SDK包括了sqlite3数据库工具,允许你浏览表项,运行SQL语句,执行SQLite数据库的其他有用功能。查阅Examining sqlite3 databases from a remote shell 来获得更多有用信息。

Using a Network Connection  使用网络连接


你可以利用网络()在你拥有的网络服务上来存储或者检索数据。进行网络操作,使用下面这些包中的类:

具身智能与空天具身智能:从理论到实践的跨领域融合 本文深入探讨了具身智能从理论到实践的发展,重点分析了空天具身智能这一前沿领域。文章阐述了如何为AI赋予“身体”,使其通过与环境实时交互进化智能,并详细拆解了构建空天智能体所需的核心技术模块,包括多模态感知、基于大模型的决策规划以及鲁棒控制。同时,结合山区电力线自主巡检等实战案例,展望了多智能体协同与标准化等未来方向。 阅读详情

相关推荐

SDFCOM_SWC警告深度剖析:从assign短路到时序标注失效的链路追踪

本文深入剖析了SDFCOM_SWC警告的根源,从assign短路到时序标注失效的全链路追踪。通过分析RTL设计中的assign语句陷阱、综合阶段的优化变形以及PrimeTime生成SDF文件的视角,提出了重构RTL设计、警告抑制和SDF生成优化等解决方案,帮助工程师有效避免时序标注问题。

weixin_42519985的博客 363

Android中数据存储的三种方式--基础

Android中常用的数据存储方式简单的大致有三种:①文件存储②SharedPreferences存储③数据库存储 一、Sharedpreferences         存 SharedPreferences是通过xml文件来做数据存储 使用SharedPreferences存储数据的步骤: 1.通过context对象创建一个SharedPreferences对象 2.通过S

无心博客 2799

【Mac+CLion+STM32+JLink】从零到一:在macOS上构建高效STM32开发与调试工作流

本文详细介绍了在macOS上使用CLion、STM32CubeMX和JLink搭建高效STM32开发与调试工作流的完整指南。从环境准备、CLion深度配置到STM32CubeMX工程实战,再到JLink烧录避坑和串口调试技巧,帮助开发者快速掌握Mac平台下的嵌入式开发全流程。

weixin_28278377的博客 254

存储类的实现

Normal 0 7.8 磅 0 2 MicrosoftInternetExplorer4 <!-- /* Font Definitions */ @font-face {font-family:宋

blizzard_fengcoco的专栏 425

SOC设计必看!Tessent DRC检查中最容易踩的5个坑(附解决方案)

本文针对SOC设计中Tessent DRC检查的常见问题,详细分析了5个最易忽视的陷阱,包括时钟域交叉、扫描链虚连、多电压域规则等,并提供专业解决方案。特别针对芯片设计中的DFT验证难点,分享了经过验证的调试方法和Tessent工具使用技巧,帮助工程师提升DRC检查效率。

weixin_29280657的博客 496

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

键值存储方式对比

本文从一个较为粗糙的角度对几种键值存储方式进行可对比

q1575825411的博客 1959

一文搞懂YOLO各版本差异:v5易用、v8多任务、v10低延迟,该怎么选?

YOLOv5的“易用”是为了降低入门门槛,适合新手启蒙和旧项目维护;YOLOv8的“多任务”是为了满足工业需求,成为目前的主流版本;YOLOv10的“低延迟”是为了适配边缘计算,代表未来的发展趋势。选型的核心不是“选最新的”,而是“选最适合自己场景的”。记住选型口诀,按场景对号入座,就能避开99%的坑。希望这篇文章能帮你彻底搞懂各版本差异,选对属于自己的YOLO版本!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1169

安卓的五种存储方式

安卓的存储方式有5种,分别为: SharedPrefences; SQLite数据库 文件存储 网络存储 ContentProvider 1. 数据存储的类型和存放位置 应用程序一般有一下几种类型: file-普通的文件存储 database-数据库文件(.db文件) sharedPreference-配置数据(.xml文件) cache-图片缓存文件 应用数据的存放位置: com.xxx.xxx 为自定义的包名 /data/data/com.xxx.xxx/cac...

mike_jungle的博客 2936

基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(项目资料ID:4)

本研究旨在设计一款高度智能化的智能小车系统,通过集成 STM32 微控制器、ESP8266 无线模块、手机 APP 以及阿里云平台,实现环境数据实时采集、远程精准控制和高效的数据交互。详细阐述系统各部分的设计原理、实现过程和测试结果,验证系统在实际应用中的可行性和有效性,为智能小车在多领域的应用提供技术支持。

以培养嵌入式工程师为己任 1万+

9、从统计到电路:未来物理不可克隆函数的基础

本文探讨了物理不可克隆函数(PUF)的关键技术,包括补偿环境影响、处理相关工艺变化、身份映射和测试方法。提出了一种基于新测试统计量Q的方法,有效提升了PUF的熵值和安全性。通过实验验证,新方法能够显著区分不同芯片,并增强PUF在不同环境下的适应性和可靠性,为未来PUF的设计与应用提供了重要基础。

pluto的博客 117

Android 的 SharePreference 存储方式

SharePreference提供一些基础的信息存储功能,所有的信息都是按照“key  = value”的形式进行保存,但是android.content.Sharepreference借口所保存的信息只能是一些基本数据类型,如字符串,整形,布尔型等...

锁晴的专栏 1797

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5734

Android (安卓数据的五种存储方式)

一、文件存储 文件存储是一种较常用的方法,文件存储是Android中最基本的一种数据存储方式,与Java中的文件存储类似,都是通过I/O流的形式存储数据 Android中的文件存储分为内部存储和外部存储 内部存储:将应用程序中的数据以文件方式存储到设备的内部,当内部存储创建的应用程序被卸载时,其内部存储文件也随之被删除 外部存储:是将文件存储到一些外部设备上,例如SD卡或者设备内嵌外部存储...

liu_xin_xin的博客 1756

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 存储方式简书,Android三种存储方式

一、SharedPreferences保存的数据在data/data//shared_refs路径下创建SharedPreferences使用:getSharedPreferences("文件名",访问权限)方法Editor类进行SharePrerences编辑效果图Wifi_SharePreferenced.pngpublic class MainActivity extends AppComp...

weixin_34246971的博客 164

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Android】安卓存储

文章目录安卓存储一、概述二、SharedPreferennces 的使用1.activity_shared_prefences.xml布局2.SharedPreferencesActivity三、**SQLite数据库**1.SQLite简介2.SQLite的特点3.简单实现3.1 页面布局3.2 Activity功能实现3.3 效果展示 安卓存储 一、概述 存储方式: SharedPreferences 临时数据存储 本质是xml,存在标签冗余 不安全,xml可以直接解析 数据轻量级 SQL..

懂得一千零一种,赋予你失败的方法! 576

【Android】安卓中的存储

【Android】安卓中的存储 1、存储在App内部 最简单的一种。在尝试过程中发现,手机中很多文件夹都没有权限读写。我们可以将我们需要写的文件存放到App中的files文件夹中,当然我们有权限在整个App中读写文件 可以通过API获取一个file对象,这里的this就是MainActivity类 // 获取当前包下的files路径 /data/data/top.woodwhale.qqlogin/files File filesDir = this.getFilesDir(); 之后就可以通过文件输出

woodwhale的博客 1643

android 四种常用的存储方式

android 四种常用的存储方式 1:SharedPreferences                 private SharedPreferences prefs;   储存:      prefs = getSharedPreferences(prefName, MODE_PRIVATE);// SharedP

juncheng19900123的专栏 517

android 存储方式简书,Android的存储方式

1.文件(Files)2.SharedPreferences3.SQLite数据库4.ContentProvider5.网络image.pngimage.pngopenFileOutPut方法的第二参数用于指定操作模式,四种模式:image.pngSharedPrefrerncesimage.png···package com.example.filetext;import java.io.Fil...

weixin_42365198的博客 102

android 网络存储,Android五大存储方式

Android五大存储方式:1、SharedPrederences2、ConetentProvider3、I/O存储4、SQLiteDatabase5、网络存储下面,分别介绍一下这五大存储方式:1、SharedPreferences:在某些时候,我们需要对应用程序较少的数据(配置信息)进行存储,并且这些数据的格式非常的简单,都是普通的字符串或标量类型的值,对于这种数据,我们就需要用到SharedP...

weixin_33265716的博客 757

Android 车载应用存储方式指南

Android Automotive OS 和 Android Auto 应用开发中可用的存储方式需要特别考虑车辆环境的限制和安全性要求。

斗锋在干嘛的博客 965

安卓数据的四种存储方式

作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。   SQLite: SQLit

f646900491的专栏 1092

Android4种存储方式介绍,安卓开发书籍推荐

e.printStackTrace(); } } 读: private String read() { String nameage=""; // 打开文件输入流, try { is = this.openFileInput(SHARED_MAIN_XML); /* 初始化字节数组 */ b = new byte[1024]; /*..

m0_66155412的博客 344

AndRoid五种存储方式:

AndRoid五种存储方式: 2011-04-15 21:11 77人阅读 评论(0) 收藏 举报 文件,sharedPreference,SQLite ,网络,ContentProvider   Preference,File, DataBase这三种方式分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/

1万+

Android 简单的SharedPreferences轻量型存储方式

package cn.bgs.sharedpreferences; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.Share

qq_36466791的博客 603

Android数据的四种存储方式

Android数据的四种存储方式 SharePreferences SQLite Contert Provider File 网络存储 作为一个完整的应用程序,数据存储的操作是必不可少的。 Android系统提供了四种存储数据方式。分别为:SharePreference、SQLite、Content Provider和File。但由于Android系统中,

blueangle17的专栏 1303
上一篇: 安卓:内容提供者(基础知识)
下一篇: Java细节01——类与接口,继承与实现
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值