首页 >> 大全

Android存储五大方式

2023-12-05 大全 24 作者:考证青年

第一种:使用存储数据

适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等

核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File 面板,展开文件浏览树,很明显数据总是存储在/data/data//目录下。对象本身只能获取数据而不支持存储和修改,存储修改是通过.edit()获取的内部接口对象实现。本身是一 个接口,程序无法直接创建实例,只能通过提供的( name, int mode)方法来获取实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:

.: 指定该数据只能被本应用程序读、写。

.:指定该数据能被其他应用程序读,但不能写。

.:指定该数据能被其他应用程序读,写

有如下主要重要方法:

. clear():清空里所有数据

. ( key , xxx value):向存入指定key对应的数据,其中xxx 可以是,float,int等各种基本类型据

. ():删除中指定key对应的数据项

():当编辑完成后,使用该方法提交修改

实际案例:运行界面如下

这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下:

class ViewOcl implements View.OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.btnSet://步骤1:获取输入值String code = txtCode.getText().toString().trim();//步骤2-1:创建一个SharedPreferences.Editor接口对象,lock表示要写入的XML文件名,MODE_WORLD_WRITEABLE写操作SharedPreferences.Editor editor = getSharedPreferences("lock", MODE_WORLD_WRITEABLE).edit();//步骤2-2:将获取过来的值放入文件editor.putString("code", code);//步骤3:提交editor.commit();Toast.makeText(getApplicationContext(), "口令设置成功", Toast.LENGTH_LONG).show();break;case R.id.btnGet://步骤1:创建一个SharedPreferences接口对象SharedPreferences read = getSharedPreferences("lock", MODE_WORLD_READABLE);//步骤2:获取文件中的值String value = read.getString("code", "");Toast.makeText(getApplicationContext(), "口令为:"+value, Toast.LENGTH_LONG).show();break;}}}

读写其他应用的: 步骤如下

1、在创建时,指定模式,表明该数据可以被其他程序读取

2、创建其他应用程序对应的:

= ("com.tony.app", .ITY);这里的com.tony.app就是其他程序的包名

3、使用其他程序的获取对应的

read = .("lock", .);

4、如果是写入数据,使用接口即可,所有其他操作均和前面一致。

对象与数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是也有其自身缺陷,比如其职能存储,int,float,long和五种简单的数据类型,比如其无法进行条件查询等。所以不论的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如数据库这样的其他数据存储方式。

第二种: 文件存储数据

核心原理: 提供了两个方法来打开数据文件里的文件IO流 ( name); ( name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选:

_存储方式分为哪几种类型_存储方式的优缺点

:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可 以使用.

:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

:表示当前文件可以被其他应用读取;

:表示当前文件可以被其他应用写入。

除此之外,还提供了如下几个重要的方法:

( name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录

File ():获取该应用程序的数据文件夹得绝对路径

[] ():返回该应用数据文件夹的全部文件

实际案例:界面沿用上图

核心代码如下:

public String read() {try {FileInputStream inStream = this.openFileInput("message.txt");byte[] buffer = new byte[1024];int hasRead = 0;StringBuilder sb = new StringBuilder();while ((hasRead = inStream.read(buffer)) != -1) {sb.append(new String(buffer, 0, hasRead));}inStream.close();return sb.toString();} catch (Exception e) {e.printStackTrace();} return null;}public void write(String msg){// 步骤1:获取输入值if(msg == null) return;try {// 步骤2:创建一个FileOutputStream对象,MODE_APPEND追加模式FileOutputStream fos = openFileOutput("message.txt",MODE_APPEND);// 步骤3:将获取过来的值放入文件fos.write(msg.getBytes());// 步骤4:关闭数据流fos.close();} catch (Exception e) {e.printStackTrace();}}

()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在, 会自动创建它。创建的文件保存在/data/data/

/files目录,如: /data/data/cn.tony.app/files/.txt,

下面讲解某些特殊文件读写需要注意的地方:

读写上的文件

其中读写步骤按如下进行:

1、调用的ate()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true

.ate().(.)

2、调用.()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt//"目录

3、使用IO流操作SD卡上的文件

注意点:手机应该已插入SD卡,对于模拟器而言,可通过命令来创建虚拟存储卡

必须在.xml上配置读写SD卡的权限

..STEMS"/>

..GE"/>

_存储方式的优缺点_存储方式分为哪几种类型

案例代码:

// 文件写操作函数private void write(String content) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 如果sdcard存在File file = new File(Environment.getExternalStorageDirectory().toString()+ File.separator+ DIR+ File.separator+ FILENAME); // 定义File类对象if (!file.getParentFile().exists()) { // 父文件夹不存在file.getParentFile().mkdirs(); // 创建文件夹}PrintStream out = null; // 打印流对象用于输出try {out = new PrintStream(new FileOutputStream(file, true)); // 追加文件out.println(content);} catch (Exception e) {e.printStackTrace();} finally {if (out != null) {out.close(); // 关闭打印流}}} else { // SDCard不存在,使用Toast提示用户Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show();}}// 文件读操作函数private String read() {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { // 如果sdcard存在File file = new File(Environment.getExternalStorageDirectory().toString()+ File.separator+ DIR+ File.separator+ FILENAME); // 定义File类对象if (!file.getParentFile().exists()) { // 父文件夹不存在file.getParentFile().mkdirs(); // 创建文件夹}Scanner scan = null; // 扫描输入StringBuilder sb = new StringBuilder();try {scan = new Scanner(new FileInputStream(file)); // 实例化Scannerwhile (scan.hasNext()) { // 循环读取sb.append(scan.next() + "\n"); // 设置文本}return sb.toString();} catch (Exception e) {e.printStackTrace();} finally {if (scan != null) {scan.close(); // 关闭打印流}}} else { // SDCard不存在,使用Toast提示用户Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show();}return null;}

第三种:存储数据

是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像、等都使用作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到来存储我们大量的数据,所以我们就需要掌握移动设备上的开发技巧

类为我们提供了很多种方法,上面的代码中基本上囊括了大部分的数据库操作;对于添加、更新和删除来说,我们都可以使用

1 db.executeSQL(String sql);  
2 db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集 

除了统一的形式之外,他们还有各自的操作方法:

1 db.insert(String table, String nullColumnHack, ContentValues values);  
2 db.update(String table, Contentvalues values, String whereClause, String whereArgs);  
3 db.delete(String table, String whereClause, String whereArgs);

以上三个方法的第一个参数都是表示要操作的表名;中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;中的第三个参数是类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数表示WHERE表达式,比如“age > ? and age < ?”等,最后的参数是占位符的实际参数值;方法的参数也是一样

下面给出demo

数据的添加

1.使用方法

ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据
cv.put("title","you are beautiful");//添加title
cv.put("weather","sun"); //添加weather
cv.put("context","xxxx"); //添加context
String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
cv.put("publish ",publish); //添加publish
db.insert("diary",null,cv);//执行插入操作

2.使用方式来实现

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句
db.execSQL(sql);//执行SQL语句

数据的删除

同样有2种方式可以实现

String whereClause = "username=?";//删除的条件
String[] whereArgs = {"Jack Johnson"};//删除的条件参数
db.delete("user",whereClause,whereArgs);//执行删除

使用方式的实现

String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句
db.execSQL(sql);//执行删除操作

上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,就是占位符实际参数集;

各参数说明:

最后,他们同时返回一个对象,代表数据集的游标,有点类似于中的。下面是对象的常用方法:

c.move(int offset); //以当前位置为参考,移动到指定行  
c.moveToFirst();    //移动到第一行  
c.moveToLast();     //移动到最后一行  
c.moveToPosition(int position); //移动到指定行  
c.moveToPrevious(); //移动到前一行  
c.moveToNext();     //移动到下一行  
c.isFirst();        //是否指向第一条  
c.isLast();     //是否指向最后一条  
c.isBeforeFirst();  //是否指向第一条之前  
c.isAfterLast();    //是否指向最后一条之后  
c.isNull(int columnIndex);  //指定列是否为空(列基数为0)  
c.isClosed();       //游标是否已关闭  
c.getCount();       //总数据项数  
c.getPosition();    //返回当前游标所指向的行数  
c.getColumnIndex(String columnName);//返回某列名对应的列索引值  
c.getString(int columnIndex);   //返回当前行指定列的值

未完待续...........

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了