Android 数据持久化
文章目录
- 一、数据存储
- 1. 数据存储方式
- 二. 文件存储
- 1. 文件存储方式分类
- (1). 内部存储
- 1. 内部存储文件路径
- 2. 特点
- 3. 过程
- 4. 实例:实现备忘录
- (2). 外部存储
- 1. 读写外部存储空间上文件的步骤
- 2. 实例:实现备忘录
- 2. XML解析
- 3. JSON解析
- 三. SharedPreferences
- 1. SharedPreferences存储的文件格式及路径
- 2. 使用SharedPreferences存储数据的步骤
- 3. 使用SharedPreferences读取数据的步骤
- 4. 举例
- 四、SQLite数据库
- 1. SQLite数据库简介
- (1). 特点
- (2). 使用SQLite数据库的方式
- 2. 数据库的创建
- 3. 数据库的使用
- 五. ContentProvider(实现数据共享)
- 1. 数据模型
- 2. URI
- (1). URL(统一资源定位符)
- (2). URI(统一资源标识符)
- 3. 创建和使用Content Provider的步骤
- 六. 网络存储
一、数据存储
1. 数据存储方式
二. 文件存储
- 该存储方式是一种较常见的方法,在Android中读取/写入文件的方法,与Java中实现I/O程序是完全一样的,提供了openFileInput()方法和openFileOutput()方法来读取设备上的文件。
- 可以存储大数据,如文本、图片、音频
- 通过java 的I/O流读取磁盘上的文件
1. 文件存储方式分类
(1). 内部存储
1. 内部存储文件路径
2. 特点
3. 过程
4. 实例:实现备忘录
MainActivity
package com.mingrisoft;import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class MainActivity extends Activity {byte[] buffer = null; //定义保存数据的数组@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText etext = (EditText) findViewById(R.id.editText); //获取用于填写记事本信息的编辑框组件ImageButton btn_save = (ImageButton) findViewById(R.id.btn_save); //获取保存按钮ImageButton btn_cancel = (ImageButton) findViewById(R.id.btn_cancel); //获取取消按钮btn_save.setOnClickListener(new View.OnClickListener() { //实现内部存储填写的文本信息@Overridepublic void onClick(View v) {FileOutputStream fos = null; //定义文件输出流String text = etext.getText().toString(); //获取文本信息try {fos = openFileOutput("memo", MODE_PRIVATE); //获得文件输出流,,并指定文件保存的位置fos.write(text.getBytes()); //保存文本信息fos.flush(); //清除缓存} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) { //输出流不为空时try {fos.close(); //关闭文件输出流Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}}}}});//实现第二次打开应用时显示上一次所保存的文本信息FileInputStream fis = null; //声明文件输入流/定义文件输入流try {fis = openFileInput("memo"); //获得文件输入流buffer = new byte[fis.available()]; //保存数据的数组fis.read(buffer); //从输入流中读取数据} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) { //输入流不为空时try {fis.close(); //关闭输入流String data = new String(buffer); // 获得数组中保存的数据etext.setText(data); //将读取的数据保存到编辑框中} catch (IOException e) {e.printStackTrace();}}}btn_cancel.setOnClickListener(new View.OnClickListener() { //实现单击取消按钮,退出应用@Overridepublic void onClick(View v) {finish(); //退出应用}});}
}
Layout_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"tools:context="com.mingrisoft.MainActivity"><!--备忘录信息--><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/marginleft"android:layout_marginRight="@dimen/marginright"android:layout_marginTop="@dimen/margintop"android:background="@null"android:gravity="top" /><!--保存按钮--><ImageButtonandroid:id="@+id/btn_save"android:layout_width="@dimen/btn_width"android:layout_height="@dimen/btn_height"android:layout_alignParentRight="true"android:src="@drawable/btn1" /><!--取消按钮--><ImageButtonandroid:id="@+id/btn_cancel"android:layout_width="@dimen/btn_width"android:layout_height="@dimen/btn_height"android:layout_toLeftOf="@+id/btn_save"android:src="@drawable/btn2" />
</RelativeLayout>
(2). 外部存储
1. 读写外部存储空间上文件的步骤
2. 实例:实现备忘录
MainActivity
package com.mingrisoft;import android.app.Activity;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class MainActivity extends Activity {byte[] buffer = null; //定义保存数据的数组private File file; //定义存储路径@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText etext = (EditText) findViewById(R.id.editText); //获取用于填写记事本信息的编辑框组件ImageButton btn_save = (ImageButton) findViewById(R.id.save); //获取保存按钮ImageButton btn_abolish = (ImageButton) findViewById(R.id.abolish); //获取取消按钮file = new File(Environment.getExternalStorageDirectory(), "Text.text"); //设置存储sd卡根目录btn_save.setOnClickListener(new View.OnClickListener() { //实现外部存储填写的文本信息@Overridepublic void onClick(View v) {FileOutputStream fos = null; //定义文件输出流String text = etext.getText().toString(); //获取文本信息try {fos = new FileOutputStream(file); //获得文件输出流,并指定文件保存的位置fos.write(text.getBytes()); //保存文本信息fos.flush(); //清除缓存} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close(); //关闭文件输出流Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}}}}});//实现第二次打开应用时显示上一次所保存的文本信息FileInputStream fis = null; //定义文件输入流try {fis = new FileInputStream(file); //获得文件输入流buffer = new byte[fis.available()]; //保存数据的数组fis.read(buffer); //从输入流中读取数据} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close(); //关闭输入流String data = new String(buffer); // 获得数组中保存的数据etext.setText(data); //保存到编辑框中} catch (IOException e) {e.printStackTrace();}}}btn_abolish.setOnClickListener(new View.OnClickListener() { //实现单击取消按钮,退出应用@Overridepublic void onClick(View v) {finish(); //退出应用}});}
}
2. XML解析
3. JSON解析
三. SharedPreferences
它是Android提供的,用来以最简单的方式对数据进行永久保存的方法
- 用来存储一些简单的配置信息的一种机制,采用了XML格式将数据存储到设备中
- 可以存储应用程序的各种配置信息,如用户名和密码、自定义参数
- 通过key、value的形式存储数据在xml文件中
- value值只能是:float、int、boolean、string、stringset
1. SharedPreferences存储的文件格式及路径
2. 使用SharedPreferences存储数据的步骤
3. 使用SharedPreferences读取数据的步骤
4. 举例
MainActivity
package com.pudding.qqlogin;import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;public class MainActivity extends Activity {private String adminname = "pudding", adminpassword = "123"; //定义后台用户名与密码private String username, password; //输入的用户名和密码@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText usernameET = (EditText) findViewById(R.id.username); //获取用户名编辑框final EditText passwordET = (EditText) findViewById(R.id.password); //获取密码编辑框ImageButton login = (ImageButton) findViewById(R.id.login); //获取登录按钮// 获得SharedPreferences对象,并创建文件名称为"data"final SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);final SharedPreferences.Editor editor = sp.edit(); // 获得Editor对象,用于存储用户名与密码信息//判断SharedPreferences文件中,用户名、密码是否存在//getString两个参数:一个是key,一个是缺省值,即如果sp中不存在该key,返回缺省值if (sp.getString("username", null) != null && sp.getString("password", null) != null) {//存在就判断用户名、密码与后台是否相同,相同直接登录if (sp.getString("username", username).equals(adminname) && sp.getString("password", password).equals(adminpassword)) {Intent intent = new Intent(MainActivity.this, MessageActivity.class); //通过Intent跳转登录后界面startActivity(intent); //启动跳转界面}} else {//实现SharedPreferences文件不存在时,手动登录并存储用户名与密码login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {username = usernameET.getText().toString(); //获得输入的用户名password = passwordET.getText().toString(); //获得输入的密码//如果输入用户名、密码与后台相同时,登录并存储if (username.equals(adminname) && password.equals(adminpassword)) { //判断输入的用户名密码是否正确Toast.makeText(MainActivity.this, "用户名、密码正确", Toast.LENGTH_SHORT).show();Intent intent = new Intent(MainActivity.this, MessageActivity.class); //通过Intent跳转登录后界面startActivity(intent); //启动跳转界面editor.putString("username", username); //存储用户名editor.putString("password", password); //存储密码editor.commit(); //提交信息Toast.makeText(MainActivity.this, "已保存用户名密码", Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();}}});}}
}
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:orientation="vertical"tools:context="com.pudding.qqlogin.MainActivity"><!--帐号--><EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/margin_top_username"android:hint="@string/username_hint" /><!--密码--><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/margin_top_password"android:hint="@string/password_hint"android:inputType="textPassword" /><!--登录按钮--><ImageButtonandroid:id="@+id/login"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/login" /></LinearLayout>
四、SQLite数据库
- 是Android自带的一个轻量级的数据库,支持基本的SQL语法,利用很少的内存,就有很好的性能,一般使用它作为复杂数据的存储引擎,可以存储用户信息
1. SQLite数据库简介
(1). 特点
- 占用资源少
- 运行效率高
- 安全可靠
- 可移植性强
(2). 使用SQLite数据库的方式
- 使用命令行shell命令(SQLite3工具)
- 使用java代码操作SQLite
2. 数据库的创建
3. 数据库的使用
五. ContentProvider(实现数据共享)
见Android的四大组件
- 两个重要知识点:数据模型、URI
1. 数据模型
- Content Provider使用基于数据模型的简单表格来提供其中的数据
2. URI
(1). URL(统一资源定位符)
(2). URI(统一资源标识符)
3. 创建和使用Content Provider的步骤
六. 网络存储
- 需要与Andriod网络数据包打交道,将数据存储到服务器上,通过网络提供的存储空间来存储/获取数据信息
Android 数据持久化相关推荐
- Android数据持久化:SharePreference
SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...
- android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解
本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...
- Android数据持久化
Android数据持久化(存储) 1.SharedPreferences SharedPreferences是Android提供的数据持久化的一种手段,适合单进程.小批量的数据存储与访问.Shared ...
- Android数据持久化技术
Android 数据持久化技术 数据持久化 文件存储 将数据存储到文件中 从文件中读取数据 SharedPreferences存储 使用SharedPreferences存储数据 从SharedPre ...
- Android数据持久化存储
Android数据持久化存储共有四种方式,分别是文件存储.SharedPreferences.Sqlite数据库和ContentProvider.在本篇幅中只介绍前面三种存储方式,因为ContentP ...
- Android数据持久化:文件存储
数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...
- Android—数据持久化、SP源码
3种数据持久化: File:openFileInput(String fileName).openFileOutput(String fileName, int mode) 不对存储的内容进行任何的格 ...
- android数据持久化框架,Android:数据持久化、Environment、SharedPreferences、内部存储internalStorage...
1.数据持久化-SDCard//数据持久化-SDCard findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @ ...
- android 数据持久化——读写SD卡中的内容
在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...
- android数据持久化存储(2)
SharedPreferences 将数据存储到SharedPreferences中: 不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的.也就是说当保存一条数据的 ...
最新文章
- python知识点 07-11
- 七十四、Python | Leetcode数字系列(下篇)
- boost::random模块生成随机 8 个字符密码相关的测试程序
- java 调用tomcat api,Tomcat采用双向认证https协议通过JavaAPI调用(一)配置SSL
- USB应用开发笔记之一:STM32上实现USB主机读写U盘
- java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园
- 癌中之王:基质微环境塑造胰腺癌瘤内结构|Cell
- AOP Aspect Oriented Programming 面向切面编程 Spring
- java自带数据库_Derby-jdk自带数据库的使用 - Java天堂
- 服务器在线看视频无法播放,上传到服务器的视频不能在线播放怎么办?
- JMeter测试实例
- 冒泡排序java代码_面试官问我插入排序和冒泡排序哪个更牛逼?
- ios手机Safari本地服务连不上
- caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
- springboot+postsql 做接口api
- 泛微oa服务器文件,泛微oa云服务器要求
- android 软件 打开方式有哪些,apk是什么文件 apk文件打开方法详解
- html雪花飘落效果,使用js实现雪花飘落效果
- 靠2块钱月入4万:越朴素的方法,往往越挣钱
- 快排优化Python表示