Android 基础-3.0 数据存储方式
Android几种数据存储方式
- 文件存储
- SharedPreference存储
- Json解析
- 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();
}
}
}
外部存储
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
/**
* 模拟向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><?//</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 数据存储方式的更多相关文章
- Android开发笔记之: 数据存储方式详解
无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数 ...
- iOS UI基础-13.0 数据存储
应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Lay ...
- Android编程中的5种数据存储方式
Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...
- Android数据存储方式--SharedPreferences
Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...
- Android中的5种数据存储方式
本文转自 http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...
- android的数据存储方式
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android的数据存储方式(转)
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android学习之基础知识九—数据存储(持久化技术)
数据持久化是将那些内存中的瞬时数据保存到存储设备,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. Android系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储.SharedP ...
- Android五种数据存储方式
android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...
随机推荐
- spring boot配置文件
1.spring boot通常打成一个jar文件发布,想修改配置文件比较麻烦,但他提供了一种读取外部配置文件的方式.在代码的主类中增加如下代码 System.setProperty("spr ...
- Argparse 命令行解析模块常用参数
Argparse模块可以轻松编写用户友好的命令行界面.该程序定义了它需要的参数,argparse 并将找出如何解析这些参数sys.argv.该argparse 模块还会自动生成帮助和用法消息,并在用户 ...
- 【Python+selenium】之奇怪问题总结
问题1: <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> Time Elapsed: 0:00:04 ...
- linux上安装Kafka
写个一篇kafka文章了.但是那都是针对性能来说的,下面看一下完整的,kafka步骤: 安装单机三个 Broker 的 Kafka 集群,使用 Kafka 集群发布和接收消息.学完本课程,对 Kafk ...
- C语言进行站点开发之cgi
安装Apach 配置ApacheRuntime 以下的过程中一直点击next 配置CGI,放开配置:AddHandler cgi-script .cgi watermark/2/text/aHR ...
- 从零开始写一个Exporter
前言 上一篇文章中已经给大家整体的介绍了开源监控系统Prometheus,其中Exporter作为整个系统的Agent端,通过HTTP接口暴露需要监控的数据.那么如何将用户指标通过Exporter的形 ...
- 【BZOJ3060】[Poi2012]Tour de Byteotia 并查集
[BZOJ3060][Poi2012]Tour de Byteotia Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Input ...
- Robbery(记忆化搜索)
Robbery Inspector Robstop is very angry. Last night, a bank has been robbed and the robber has not b ...
- Throwing Dice(概率dp)
C - Throwing Dice Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Lig ...
- ElasticSearch(二十一)正排和倒排索引
1.区别 搜索的时候,要依靠倒排索引:排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立 ...