Android之数据存储

安卓自定义SP用来储存数据 向首选项中存取数据(仅限于String,Integer,Boolean) public static void put(Context context,String key,Object value){ SharedPreferences sp = getSharedPreference(context); SharedPreferences.Editor editor = sp.edit(); if(value instanceof String){ editor.putString(key, (String) value); }else if(value instanceof Integer){ editor.putInt(key, (Integer) value); }else if(value instanceof Boolean){ editor.putBoolean(key, (Boolean) value); } editor.commit(); } 立即下载

一,sp存储

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。

其存储位置在/data/data/<包名>/shared_prefs目录下。

SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

SharedPreferences: 对应sp文件的接口
context. getSharedPreferences (String name, int mode): 得到SP对象
name: 文件名(不带.xml)
mode: 生成的文件模式(是否是私有的,即其它应用是否可以访问)
Editor sp.edit() : 得到Editor对象
Xxx sp.getXxx(name,defaultValue): 根据name得到对应的数据
Editor : 能更新sp文件的接口
 Editor put(name, value) : 保存一个键值对, 没有真正保存到文件中
Editor remove(name)
commit(): 提交, 数据真正保存到文件中了

1.sp存储的保存数据

public void save(View v) {
		//2.得到Editor对象
		Editor edit=sp.edit();
		//3.得到输入的key/value
		String key = et_sp_key.getText().toString();
		String value = et_sp_value.getText().toString();
		//4.使用Editor保存key-value
		edit.putString(key, value).commit();
		//5.提示
		Toast.makeText(this, "保存完成", 0).show();
	}
2.sp存储的读取数据

	public void read(View v) {
		//1.得到输入的key
		String key = et_sp_key.getText().toString();
		//2.根据key读取对应的value
		String value = sp.getString(key, null);
		//3.显示
		if(value==null){
			Toast.makeText(this, "没有找到对应的value", 0).show();
		}else{
			et_sp_value.setText(value);
		}
	}
二,手机内部文件存储

应用运行需要的一些较大的数据或图片可以用文件保存的手机内部
文件类型: 任意
数据保存的路径: /data/data/projectPackage/files/
可以设置数据只能是当前应用读取, 而别的应用不可以
应用卸载时会删除此数据

读取文件:FileInputStream fis = openFileInput("logo.png");
保存文件:FileOutputStream fos = openFileOutput("logo.png", MODE_PRIVATE)
得到files文件夹对象:File filesDir = getFilesDir();  
操作asserts下的文件
得到AssetManager : context.getAssets();
读取文件: InputStream open(filename);
加载图片文件:Bitmap BitmapFactory.decodeFile(String pathName)   // .bmp/.png/.jpg
1.保存数据:

	public void save(View v) throws IOException {
		//1.得到InputStream-->读取assets下的logo.png
			//得到AssetManager
		AssetManager manager = getAssets();
		//读取文件
		InputStream is = manager.open("logo.png");
		//2.得到OutputStream-->/data/data/packageName/files/logo.png
		FileOutputStream fos = openFileOutput("logo.png", Context.MODE_PRIVATE);
		//3.边读边写
		byte[] buffer=new byte[1024];
		int len = -1;
		while((len = is.read(buffer))!=-1){
			fos.write(buffer,0,len);
		}
		fos.close();
		is.close();
		//4.显示
		Toast.makeText(this, "保存完成", 0).show();
	}
2.读取数据 

	public void read(View v) {// /data/data/packageName/files/logo.png
		//1.得到图片文件路径
			///data/data/packageName/files
		String filesPath = getFilesDir().getAbsolutePath();
		String imagePath = filesPath + "/logo.png";
		//2.读取加载图片文件得到bitmap对象
		Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
		//3.将其设置到imgeView中显示 
		iv_if.setImageBitmap(bitmap);
	}

三, SD卡外部file存储

应用运行用到的数据文件(如图片)可以保存到sd卡中
文件类型: 任意
数据保存的路径: 
路径1: /storage/sdcard/Android/data/packageName/files/
路径2: /storage/sdcard/xxx/
路径1 :其它应用可以访问,应用卸载时删除
路径2 : 其它应用可以访问, 应用卸载时不会删除
必须保证sd卡挂载在手机上才能读写, 否则不能操作

Environment :  操作SD卡的工具类
得到SD卡的状态:Environment.getExternalStorageState() 
得到SD卡的路径:Environment.getExternalStorageDirectory()
SD卡可读写的挂载状态值:Environment.MEDIA_MOUNTED
context. getExternalFilesDir():   得到/mnt/sdcard/Android/data/pageckage_name/files/xxx.txt
操作SD卡的权限: android.permission.WRITE_EXTERNAL_STORAGE

路径1:
1.保存数据 

	public void save(View v) throws IOException {
		//1.判断sd卡状态,如果是挂载的状态才继续,否则提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名\内容;
			String fileName = et_of_name.getText().toString();
			String content = et_of_content.getText().toString();
			//3.得到指定文件的OutputStream
				//1).得到sd卡下的files路径
			String filesPath = getExternalFilesDir(null).getAbsolutePath();
				//2).组成完整路径
			String filePath = filesPath + "/" + fileName;
				//3).创建FileOutputStream
			FileOutputStream fos = new FileOutputStream(filePath);
			//4.写数据
			fos.write(content.getBytes("utf-8"));
			fos.close();
			//5.提示
			Toast.makeText(this, "保存完成", 0).show();
		}else{
			Toast.makeText(this, "sd卡没有挂载", 0).show();
		}
	}

2.读取数据

	public void read(View v) throws IOException {
		//1.判断sd卡状态,如果是挂载的状态才继续,否则提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名\内容;
			String fileName = et_of_name.getText().toString();
			//3.得到指定文件的OutputStream
				//1).得到sd卡下的files路径
			String filesPath = getExternalFilesDir(null).getAbsolutePath();
				//2).组成完整路径
			String filePath = filesPath + "/" + fileName;
				//3).创建FileInputStream
			FileInputStream fis = new FileInputStream(filePath);
			//4.写数据
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = -1;
			while((len=fis.read(buffer))!=-1){
				baos.write(buffer,0,len);
			}
			String content = baos.toString();
			
			//5.显示
			et_of_content.setText(content);
		}else{
			Toast.makeText(this, "sd卡没有挂载", 0).show();
		}
	}

路径2:
1.保存数据 

	// /storage/sdcard/atguigu/xxx.txt
	public void save2(View v) throws Exception {
		//1.判断sd卡状态,如果是挂载的状态才继续,否则提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名\内容;
			String fileName = et_of_name.getText().toString();
			String content = et_of_content.getText().toString();
			//3.得到指定文件的OutputStream
				//1)./storage/sdcard/
			String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
				//2)./storage/sdcard/atguigu/(创建文件夹)
			File file = new File(sdPath+"/atguigu");
			if(!file.exists()){
				file.mkdirs();//创建文件夹
			}
				//3)./storage/sdcard/atguigu/xxx.txt
			String filePath = sdPath+"/atguigu/"+fileName;
				//4).创建输出流
			FileOutputStream fos = new FileOutputStream(filePath);
			//4.写数据
			fos.write(content.getBytes("utf-8"));
			fos.close();
			//5.提示
			Toast.makeText(this, "保存完成", 0).show();
		}else{
			Toast.makeText(this, "sd卡没有挂载", 0).show();
		}
	}
2.读取数据 
	public void read2(View v) throws Exception {
		//1.判断sd卡状态,如果是挂载的状态才继续,否则提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名\内容;
			String fileName = et_of_name.getText().toString();
			//3.得到指定文件的IntputStream
				//1)./storage/sdcard/
			String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
			String filePath=sdPath+"/atguigu/"+fileName;
				//3).创建FileInputStream
			FileInputStream fis = new FileInputStream(filePath);
			//4.读取数据,成String
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = -1;
			while((len=fis.read(buffer))!=-1){
				baos.write(buffer,0,len);
			}
			String content = baos.toString();
			fis.close();
			//5.显示
			et_of_content.setText(content);
		}else{
			Toast.makeText(this, "sd卡没有挂载", 0).show();
		}		
	}

四,SQLite数据库存储

1)说明

应用运行需要保存一系列有一定结构的数据, 比如说公司员工信息
文件类型: .db
数据保存的路径: /data/data/projectPackage/databases/xxx.db
默认情况下其它应用不能访问, 当前应用可以通过ContentProvider提供其它应用操作
应用卸载时会删除此数据

SQLite (http://www.sqlite.org/),是一款轻型的关系型数据库服务器, 移动设备的数据库存储都使用SQLite,

 2)它的特点: 
安装文件小: 最小只有几百K, Android系统已经安装
支持多操作系统: Android, WP, IOS, Windows, Linux等
支持多语言: 比如 Java 、 PHP、C#等. 
处理速度快:  处理速度比Mysql, Oracle, SqlServer都要快(数据量不是特别大)
Sqlite中的一个数据库就是一个.db文件(本质上.db的后缀都可以不指定)

3)Sqlite数据库命令行

adb shell  进入系统根目录
cd data/data/…/databases : 进入包含数据库文件的文件夹下
sqlite3 contacts2.db : 使用sqlite3命令连接指定的数据库文件, 进入连接模式
 .help : 查看命令列表
.tables : 查看所有表的列表
执行insert/delete/update/select语句
.exit : 退出数据库连接模式
Ctrl + C : 直接退出sell模式

4)SQLite支持的数据类型

INT/INTEGER : 整数
FLOAT/DOUBLE : 小数
CHAR/VARCHAR/TEXT : 字符串文本
BLOB : 文件
DATE/ DATETIME : 日期/日期时间
5)Sqlite的CRUD语句

/*插入*/
INSERT INTO employee (name,salary,birthday) VALUES('Tom', 8000, '1988-09-21');
/*删除*/
DELETE FROM employee WHERE _id=2 
/*更新*/
UPDATE employee SET name='Jack',salary=salary+1000 WHERE _id=1
/*查找*/
SELECT * FROM employee where _id=3

6)SQLiteOpenHelper: 数据库操作的抽象帮助类

   SQLiteOpenHelper(Context context, String name, 
           CursorFactory factory, int version) : 构造方法, 指定数据库文件名和版本号
      abstract void onCreate(SQLiteDatabase db) : 用于创建表
      abstract void onUpgrade() : 用于版本更新
      SqliteDatabase getReadableDatabase() : 得到数据库连接
7)SqliteDatabase: 代表与数据库的连接的类

long insert(): 用于执行insert SQL, 返回id值
       int update(): 用于执行update SQL
       int delete(): 用于执行delete SQL
       Cursor query(): 用于执行select SQL, 返回包含查询结果数据的Cursor
       void execSql(sql) : 执行sql语句
     
       beginTransaction(): 开启事务
       setTransactionSuccessful(): 设置事务是成功的
       endTransaction(): 结束事务, 可能提交事务或回滚事务
       openDatabase(String path, CursorFactory factory, int flags):  得到数据库连接

8)Cursor : 包含所有查询结果记录的结果集对象(光标,游标)

int getCount() : 匹配的总记录数
boolean moveToNext() : 将游标移动到下一条记录的前面
Xxx getXxx(columnIndex) : 根据字段下标得到对应值
int getColumnIndex(columnname): 根据字段名得到对应的下标

数据库操作的帮助类

package com.example.activitydemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
 * 数据库操作的帮助类
 * @author Xiaocici
 *
 */
public class DBHelper extends SQLiteOpenHelper {

	public DBHelper(Context context,int version) {
		super(context,"atguigu",null, version);
		// TODO Auto-generated constructor stub
	}

	/**
	 * 什么时候才会创建数据库文件?
	 *  1)数据库文件不存在
	 *  2)
	 * 
	 * 当数据库文件创建的时候调用
	 * 建表
	 * 插入一些初始化数据
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.e("TAG", "DBHelper create");
		//建表
		String sql = "create table person( _id integer primary key autoincrement, name varchar,age int)";
		db.execSQL(sql);
		//插入一些初始化数据
		db.execSQL("insert into person(name,age) values( 'Tom1',11)");
		db.execSQL("insert into person(name,age) values( 'Tom2',12)");
		db.execSQL("insert into person(name,age) values( 'Tom3',13)");
	}

	//当传入的版本号大于数据库的版本号时调用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		Log.e("TAG", "DBHelper onUpgrade");

	}

}
创建库

	public void testCreateDB(View v){
		DBHelper dbHelper = new DBHelper(this, 1);
		
		//获取连接
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		Toast.makeText(this, "创建数据库", 0).show();
	}
更新库
public void testUpdateDB(View v){
		DBHelper dbHelper = new DBHelper(this, 2);
		//获取连接
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		Toast.makeText(this, "更新数据库", 0).show();
	}
添加记录
	public void testInsert(View v){
		//1.得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//2.执行insert insert into person(name,age) values('Tom',12)
		ContentValues values = new ContentValues();
		values.put("name", "Tom");
		values.put("age", 12);
		long id = database.insert("person", null, values);
		//3.关闭
		database.close();
		//4.提示
		Toast.makeText(this, "id=" + id, 0).show();
	}
更新
	public void testUpdate(View v){
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//执行Update update person set name=Jack,age=13 where _id=4
		ContentValues values = new ContentValues();
		values.put("name", "Jack");
		values.put("age", 13);
		int updateCount = database.update("person", values , "_id=?", new String[]{"4"});
		database.close();
		Toast.makeText(this, "updateCount=" + updateCount, 0).show();
	}

删除

	public void testDelete(View v){
		//1.得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//2.执行delete delete from person where _id=2
		int deleteCount = database.delete("person", "_id=2", null);
		//3.关闭
		database.close();
		//4.提示
		Toast.makeText(this, "deleteCount=" + deleteCount, 0).show();
	}

查询
	public void testQuery(View v){
		//1.得到连接
		DBHelper dbHelper = new DBHelper(this, 2);
		SQLiteDatabase database = dbHelper.getReadableDatabase();
		//2.执行query select * from person
		Cursor cursor = database.query("person", null, null, null, null, null, null);
		//Cursor cursor = database.query("person", null, "_id=?", new String[]{"3"}, null, null, null);
		//得到总匹配数
		int count = cursor.getCount();
		//取出cursor中的所有数据
		while(cursor.moveToNext()){
			//_id
			int id = cursor.getInt(0);
			//name
			String name = cursor.getString(1);
			//age
			int age = cursor.getInt(cursor.getColumnIndex("age"));
			Log.e("TAG", id+"-" + name + "-" + age);
			
		}
		//3.关闭
		cursor.close();
		database.close();
		//4.提示
		Toast.makeText(this, "count=" + count, 0).show();
		
	}

	/*
	 *测试事务处理
	 *update person set age=15 where _id=1
	 *update person set age=17 where _id=3
	 *
	 *一个功能中对数据库进行的多个操作,要么都成功,要么都失败
	 *事务处理的3步:
	 *1.开启事务(获取连接后)
	 *2.设置事务成功(在全部正常执行完后)
	 *3.结束事务(finally)
	 */
	public void testTransaction(View v) {
		SQLiteDatabase database = null;
		try{
			// 得到连接
			DBHelper dbHelper = new DBHelper(this, 2);
			database = dbHelper.getReadableDatabase();
			
			//1.开启事务(获取连接后)
			database.beginTransaction();
			
			// 执行update update person set age=15 where _id=1
			ContentValues values = new ContentValues();
			values.put("age", 15);
			int updateCount = database.update("person", values , "_id=?", new String[]{"1"});
			Log.e("Tag","updateCount="+ updateCount);
			
			//出了异常
			boolean flag=true;
			if(flag){
				throw new RuntimeException("出异常啦!!!");
			}
			
			// 执行update update person set age=17 where _id=3
			values = new ContentValues();
			values.put("age", 17);
			int updateCount2 = database.update("person", values , "_id=?", new String[]{"3"});
			Log.e("Tag", "updateCount2=" + updateCount2);
			
			//2.设置事务成功(在全部正常执行完后)
			database.setTransactionSuccessful();
			
			//关閉
			database.close();
		}catch(Exception e){
			e.printStackTrace();
			Toast.makeText(this, "出异常了~~", 0).show();
		}finally{
			//3.结束事务(finally)
			if(database==null){
				database.endTransaction();
				database.close();
			}
		}
	}
五.远程服务器存储

太长了,接下一篇


深入解析CycloneDDS跨域通信中的XML配置文件优化策略 本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。 阅读详情

相关推荐

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉

本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 1558

Android本地数据存储(SP、SQLite、Room)

Android本地数据存储常用的有三种方式 1、SP存储,key-value的方式存储在本地的xml文件中,/data/data/xxx.xx/shared_prefs/xxx.xml 2、sqlite存储 3、room存储。

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 6478

【保姆级教程】不到一元32位芯片 DIY迷你时钟

基于不到一元的CH32V003F4P9芯片制作的迷你多功能时钟。

twen51的博客 1813

Android 数据存储、SP的简单使用

数据保存分类(目前主流):SP、SQLite、Room 1 SP:sharedPreference首选项 很小,简单的数据可以保存在SP window 的.ini文件,android 的.xml文件(存储格式是key-value) 存储软件的配置信息(比如自动登录,记住密码,主题记录,书看到69页记住): 不能存太多的信息,因为当程序运行首选项里的数据会全部加载进内容 把数据保存到app本身......

m0_45877477的博客 4042

别再纠结了!车规MCU选M7还是R52?一张图看懂你的车身控制器/域控制器该用谁

本文深入探讨车规MCU选型中Cortex-M7与Cortex-R52的核心差异,提供基于安全等级与实时性需求的选型决策图。通过对比ASIL认证、实时性能及成本效益,帮助工程师在车身控制器/域控制器设计中做出精准选择,避免潜在风险与隐性成本。

weixin_42628688的博客 397

TI AWR1642实战指南:CCS调试mmWave Demo Visualizer全流程解析

本文详细解析了TI AWR1642开发板的CCS调试流程,重点介绍了mmWave Demo Visualizer的使用方法。从环境准备、版本确认到bin文件烧录、CCS工程配置,再到调试启动与结果验证,提供了全流程的实战指南,帮助开发者快速掌握AWR1642的调试技巧,避免常见错误。

weixin_30790841的博客 111

Android数据存储SP的简单介绍

sp首选项的介绍

qq_53077129的博客 3199

机器人环境仿真软件:Gazebo_(6).传感器仿真

通过 Gazebo 和 ROS,我们可以方便地配置和使用多种传感器,进行机器人环境的仿真和调试。传感器仿真不仅帮助我们验证和测试机器人的感知能力,还可以在真实部署前发现和解决潜在的问题。本节详细介绍了如何在 Gazebo 中配置激光雷达、摄像头、IMU、声纳和 GPS 传感器,并展示了如何在 ROS 中接收和处理这些传感器数据。此外,还介绍了多传感器融合的基本方法和调试工具,希望这些内容能对你的机器人仿真工作有所帮助。

kkchenjj的博客 1388

Android 数据存储:SharedPreferences(SP)

作为 Android 的数据存储方式之一的SharedPreferences(以下简称SP),我们在开发中也是或多或少会用到。今天就来总结一下如何使用 SP 以及使用 SP 的注意事项。 1.首先先聊聊使用SP 的注意事项 SP 适合存储一些轻量级的持久化数据,如果你的数据量很大,那么建议你更换存储方式。 SP 提供了数据的一致性,但这是以牺牲程序性能为代价的,所以如果存储的数据需要经常...

李家大大大公子 8527

【CAD二次开发】炸开所有的嵌套块

代码】【CAD二次开发】炸开所有的嵌套块。

1513

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5039

Android开发sp存储

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Android开发中的SP存储教程 在Android开发中,SharedPreferences(简称SP)是一种轻量级的数据存储方式,通常用于保存简单的数据,例如用户的设置或小块信息。本文...

weixin_34820751的博客 415

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【固定滑窗】2024E-考勤信息【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 619

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

在移动应用开发中,数据存储是一个非常重要且必不可少的技术。无论是保存用户的信息、记录应用的状态,还是缓存网络请求的数据,数据存储都是必须处理的需求。而在安卓开发中,我们有许多选项可以选择来进行数据存储。下面我们介绍几种安卓的常见的数据存储方式,包括Shared Preferences、数据库存储等。在Android中,SharedPreferences是一种轻量级的存储机制,用于存储和检索键值对数据。它提供了一种简单的方法来保存应用程序的持久化数据,包括用户首选项、设置信息、应用程序状态等。

qq_30665153的博客 3590

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android安卓——数据存储之数据库存储

在安卓开发中,对于用户端数据的存储常使用SQLite数据库。 使用SQLite数据库进行数据的增删查改操作。后面附有代码 一、SQLite数据库1、SQLite数据库简介(1)、SQLite数据库是一个开源的嵌入式关系数据库。(2)、特点: 更加适用于嵌入式系统,嵌入到使用它的应用程序中去。 占用非常少的内存,运行高效可靠,可移植性好。

Deniece_X的博客 4468

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

探索 LeanStorageDemo-Android:一款强大的安卓数据存储解决方案

探索 LeanStorageDemo-Android:一款强大的安卓数据存储解决方案 在快速发展的移动应用领域,高效、可靠的数据管理是应用程序成功的关键因素之一。今天我们要介绍的是 LeanStorageDemo-Android,一个由 LeanCloud 开发的安卓示例应用,它展示了如何利用 LeanCloud 的 LeanStorage 服务进行数据存储和检索。这款项目不仅提供了清晰的代码示例...

gitblog_00040的博客 651

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

(六) 安卓数据存储使用

在安卓应用开发中,数据存储是实现应用功能的重要部分。合理选择和实现数据存储方式,可以提升应用的性能和用户体验。本文将介绍安卓开发中常用的数据存储方法、适用场景、实现方式以及一些实践示例,帮助你全面掌握安卓数据存储技术。掌握安卓数据存储技术是开发高效应用的关键。通过本文的介绍和实践示例,希望你对安卓数据存储方法有一个全面的了解,并在实际开发中灵活应用。持续学习和实践是掌握数据存储技术的关键,祝你在安卓开发的道路上取得成功!

小新的博客 1104

Android安卓——数据存储之文件存储

在安卓中对数据的存储有了SQLite数据库存储数据,在本次学习的是对文件的存储。利用SharedPerences将数据存储在文件中。 实战:本次学习准备的实战是总结性写了一下数据内部存储的读写、文件内部存储的读写、在SD卡中的读写。 一、 简单存储SharedPreferences1、简单存储简介 SharedPreferences是一种轻量级的数据保存方式。 通过SharedPrefer

Deniece_X的博客 1455

android方法保存值,安卓数据存储五种方式

安卓数据存储五种方式数据存储:五种:Shared Preferences 参数共享Internal Storage 内部存储External Storage 外部存储 (sdcard)SQLite Databases 数据库存储Network Connection 网络存储1、Shared Preferences 参数共享应用场景:应用程序有少量的数据需要保持(保持设置的参数)文件保持...

weixin_35435986的博客 559

【Android】开局一行码,数据自己填(浅析安卓数据存储)

对于Android开发者而言,掌握数据存储技术是构建强大应用的必备技能。Android提供了多种数据存储方案来满足不同的需求。本篇博客,我们将探讨Android中两种核心的数据存储技术:SharedPreferences和SQLite数据库。在Android开发中,对于轻量级数据的存储,SharedPreferences无疑是一个简单而强大的工具。它允许开发者以键值对的形式存储和检索数据,非常适合用于存储应用配置、用户偏好设置等。

2301_79344902的博客 1178

【安卓基础6】数据存储

一、共享参数SharedPreferences、共享参数的使用场景、特点、共享参数的用法、二、数据库SQLite、SQLite基本语法、数据库帮助器SQLiteOpenHelper、创建数据库帮助器类、使用数据库帮助器获取数据库实例、数据库版本管理、数据库管理器SQLiteDatabase、获取SQLiteDatabase实例、执行SQL语句、插入数据、查询数据、更新数据、删除数据、事务处理、关闭数据库连接、操作数据库方式-总结、三、存储卡的文件操作、外部存储控件、在存储卡上读写图片文件、四、应用组件App

丨康有为丨的博客 1460

android 存储策略,安卓数据存储方案

持久化技术简介数据持久化就是指将那些内存中的瞬时数据保存在存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不回丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供一种机制可以让数据在瞬时状态和持久状态之间进行转换。Android 系统中主要提供了3种方式,即文件存储、SharedPreference 存储以及数据存储。1、文件存储文件存储是...

weixin_29864831的博客 374

Android常见数据存储方式

学习中

m0_64346512的博客 3038

安卓数据存储知识总结

标题:安卓数据存储知识总结 Android中的SharedPreferences存储数据方式

weixin_45674098的博客 296

安卓开发---09 Android数据存储

SharedPreferences SQLiteOpenHelper Timer定时器 1.SharedPreferences偏好 偏好的几种模式 Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写; Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写;...

qq_44534541的博客 449

安卓之数据存储学习总结

安卓的数据存储方式大概有四种: 一、sdcard文件 数据区中的文件只能被自己的程序访问,存放路径为data/data/程序名/文件名 写入: private void writefile(String str, String path) { // TODO Auto-generated method stub File file; try { file = new F

TO TOP CODER 1240
上一篇: Android之黑名单的制作【JAVA】
下一篇: Android之远程服务器存储
线条小狗LLL
博客等级 码龄11年 121粉丝 349原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值