文章目录

  • 一、数据存储
    • 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 数据持久化相关推荐

  1. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

  2. android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解

    本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...

  3. Android数据持久化

    Android数据持久化(存储) 1.SharedPreferences SharedPreferences是Android提供的数据持久化的一种手段,适合单进程.小批量的数据存储与访问.Shared ...

  4. Android数据持久化技术

    Android 数据持久化技术 数据持久化 文件存储 将数据存储到文件中 从文件中读取数据 SharedPreferences存储 使用SharedPreferences存储数据 从SharedPre ...

  5. Android数据持久化存储

    Android数据持久化存储共有四种方式,分别是文件存储.SharedPreferences.Sqlite数据库和ContentProvider.在本篇幅中只介绍前面三种存储方式,因为ContentP ...

  6. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  7. Android—数据持久化、SP源码

    3种数据持久化: File:openFileInput(String fileName).openFileOutput(String fileName, int mode) 不对存储的内容进行任何的格 ...

  8. android数据持久化框架,Android:数据持久化、Environment、SharedPreferences、内部存储internalStorage...

    1.数据持久化-SDCard//数据持久化-SDCard findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @ ...

  9. android 数据持久化——读写SD卡中的内容

    在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...

  10. android数据持久化存储(2)

    SharedPreferences 将数据存储到SharedPreferences中: 不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的.也就是说当保存一条数据的 ...

最新文章

  1. python知识点 07-11
  2. 七十四、Python | Leetcode数字系列(下篇)
  3. boost::random模块生成随机 8 个字符密码相关的测试程序
  4. java 调用tomcat api,Tomcat采用双向认证https协议通过JavaAPI调用(一)配置SSL
  5. USB应用开发笔记之一:STM32上实现USB主机读写U盘
  6. java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园
  7. 癌中之王:基质微环境塑造胰腺癌瘤内结构|Cell
  8. AOP Aspect Oriented Programming 面向切面编程 Spring
  9. java自带数据库_Derby-jdk自带数据库的使用 - Java天堂
  10. 服务器在线看视频无法播放,上传到服务器的视频不能在线播放怎么办?
  11. JMeter测试实例
  12. 冒泡排序java代码_面试官问我插入排序和冒泡排序哪个更牛逼?
  13. ios手机Safari本地服务连不上
  14. caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
  15. springboot+postsql 做接口api
  16. 泛微oa服务器文件,泛微oa云服务器要求
  17. android 软件 打开方式有哪些,apk是什么文件 apk文件打开方法详解
  18. html雪花飘落效果,使用js实现雪花飘落效果
  19. 靠2块钱月入4万:越朴素的方法,往往越挣钱
  20. 快排优化Python表示

热门文章

  1. 网页标签中description是什么意思
  2. LSTM最好理解文章
  3. 经常玩电脑正确的坐姿_告诉你电脑族的最佳坐姿_养生人群_养生之道网
  4. SD miniSD microSD TF CF MMC XD-Picture卡 SDIO CE-ATA SDHC SDXC
  5. 极路由KMS_Activator插件使用教程
  6. 计算机之传奇之父詹姆斯高斯林
  7. TERRA-COTTA 之TCCONFIG配置问题 回顾
  8. 对于杯子、淘宝搜索框的测试用例
  9. 一次内存泄露排查小结
  10. 部署静态页面到腾讯云服务器