Android几种数据存储方式

  1. 文件存储
  2. SharedPreference存储
  3. Json解析
  4. SQLite数据库存储

文件存储

文件存储是Android中最基本的一种存储方式,和Java中实现I/O的方式,由Context类提供openFileInput()和openFileOutput()方法打开。文件存储主要分两种存储,一种是内部存储,一种是外部存储。

内存存储:使用了FileInputStream类中的openFileInput()方法,用于读取数据;使用了FileOutputStream类中的openFileOutput()方法,用于写入数据。

外部存储:使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。

内存存储-写入文件

                File file = new File(this.getFilesDir(), "info.txt");
try {
FileOutputStream fos = new FileOutputStream(file);
String info = qq + "##" + password;
fos.write(info.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}

内存存储-读取文件

    /**
* 根据原来保存的文件信息,把QQ号码和密码信息显示到界面
*/
private void restoreInfo() {
File file = new File(this.getFilesDir(), "info.txt");
// 如果文件存在并且有内容就读取出来
if (file.exists() && file.length() > 0) {
try {
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String info = br.readLine();
String qq = info.split("##")[0];
String pwd = info.split("##")[1];
mEtnumber.setText(qq);
mEtPasswd.setText(pwd); } catch (Exception e) {
e.printStackTrace();
}
}
}

外部存储

外部存储,指的是写入到手机SD卡。需要两个3个步骤
1、AndroidManifest.xml 申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、在调用的地方,注册 Manifest.permission.WRITE_EXTERNAL_STORAGE 权限
3、调用的地方,需要检查SD卡可用状态 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
    /**
* 模拟向SD卡写入一个视频文件
* @param view
*/
public void click(View view) {
performCodeWithPermission("写入文件到sd卡", new PermissionCallback() {
@Override
public void hasPermission() {
// 检查SD卡的状态
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File sdFile = Environment.getExternalStorageDirectory();// 外部存储空间
long sdSize = sdFile.getFreeSpace();
if (sdSize > 5 * 1024 * 1024) {// 5M
File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + "hlw.3gp");
try {
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
for (int i = 0; i < 5 * 1024; i++) {
fos.write(buffer);
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this,"sd卡空间不足", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(MainActivity.this,"没有挂载", Toast.LENGTH_SHORT).show();
}
} @Override
public void noPermission() { }
}, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
}

SharedPreference存储

对用户输入的账号以及密码进行存储,并且进行显示。我们使用SharedPreferences

存储数据

/**
* 保存用户名 密码的业务方法
* @param context 上下文
* @param username 用户名
* @param pas 密码
* @return true 保存成功 false 保存失败
*/
public static void saveUserInfo(Context context,String username,String pas){
/**
* SharedPreferences将用户的数据存储到该包下的shared_prefs/config.xml文件中,
* 并且设置该文件的读取方式为私有,即只有该软件自身可以访问该文件
*/
SharedPreferences sPreferences=context.getSharedPreferences("config", context.MODE_PRIVATE);
Editor editor=sPreferences.edit();
//当然sharepreference会对一些特殊的字符进行转义,使得读取的时候更加准确
editor.putString("username", username);
editor.putString("password", pas);
//这里我们输入一些特殊的字符来实验效果
editor.putString("specialtext", "hajsdh><?//");
editor.putBoolean("or", true);
editor.putInt("int", 47);
//切记最后要使用commit方法将数据写入文件
editor.commit();
}

读取数据

 //显示用户此前录入的数据
SharedPreferences sPreferences=getSharedPreferences("config", MODE_PRIVATE);
String username=sPreferences.getString("username", "");
String password =sPreferences.getString("password", "");
ed_username.setText(username);
ed_pasw.setText(password);

显示的XML

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="specialtext">hajsdh&gt;&lt;?//</string>
<string name="username">dsa</string>
<string name="password">dasdasd</string>
<int name="int" value="47" />
<boolean name="or" value="true" />
</map>

JSON读取

        // 创建Json
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name", "jadyli");
jsonObject.put("gender", "male");
jsonObject.put("age", 18);
System.out.println(jsonObject.toString(1));
} catch (JSONException e) {
e.printStackTrace();
} // 解析Json
String json = "{\"name\": \"jadyli\", \"gender\": \"male\", \"age\": 18}";
try {
JSONObject jsonObject = new JSONObject(json);
System.out.println("姓名:" + jsonObject.getString("name"));
System.out.println("性别:" + jsonObject.getString("gender"));
System.out.println("年龄:" + jsonObject.getString("age"));
} catch (JSONException e) {
e.printStackTrace();
}

Android 基础-3.0 数据存储方式的更多相关文章

  1. Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数 ...

  2. iOS UI基础-13.0 数据存储

    应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Lay ...

  3. Android编程中的5种数据存储方式

    Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...

  4. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

  5. Android中的5种数据存储方式

    本文转自  http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...

  6. android的数据存储方式

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  7. Android的数据存储方式(转)

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  8. Android学习之基础知识九—数据存储(持久化技术)

    数据持久化是将那些内存中的瞬时数据保存到存储设备,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储.SharedP ...

  9. Android五种数据存储方式

    android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...

随机推荐

  1. window平台安装 MongoDB(二)

    MongoDB提供了可用于32位和64位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB预编译二进制包下载地址:http://www.mongodb.org/downloads ...

  2. Unity UGUI——提供可视功能的UI组件(Text)

    基本属性介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fontsize/400/fill/I0J ...

  3. CyclicBarrier的工作原理及其实例

    CyclicBarrier是多线程中一个重要的类,主要用于线程组内部之间的线程的相互等待问题. 1.CyclicBarrier的工作原理 CyclicBarrier大致是可循环利用的屏障,顾名思义,这 ...

  4. android Notification 的使用(锁定通知栏)

    近期一直在研究 android .并一边研究一边做应用.当中遇到了把程序通知常驻在 Notification 栏,而且不能被 clear 掉(就像android QQ一样)的问题.经过研究实现了其功能 ...

  5. 在ListView的GroupItem头中显示每列的Summary

    问题描述 WPF自带的ListView和DataGrid控,都提供了数据分组的支持,并可以对分组的Header进行自定义.但是,如果想在每个分组的Header中,显示出本分组的"小计&quo ...

  6. EasyPlayer RTSP播放器运行出现: Unable to load DLL 找不到指定的模块。exception from HRESULT 0x8007007E 解决方案

    最近有EasyPlayer RTSP播放器的开发者反馈,在一台新装的Windows Server 2008的操作系统上运行EasyPlayer RTSP播放器出现"Unable to loa ...

  7. 九度OJ 1201:二叉排序树 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4894 解决:2062 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1< ...

  8. Android笔记之AsyncTask

    AsyncTask中的4个回调 onPreExecute(),在doInBackground(Params...)之前运行在UI线程中 onPostExecute(Result),在doInBackg ...

  9. Android系统移植与调试之------->如何修改Android设备的桌面背景图片

    1.切换到~/mx0831-0525/device/other/TBDG1073/overlay/frameworks/base/core/res/res目录 2.准备好一张相应尺寸的图片并且命名为d ...

  10. PHP安全编程之php.ini配置

    1.register_globals=On <?php//ex1.php  if(check_admin())  {  $is_admin=true;  }  if($is_admin)  {  ...