Android的存储

  • Android中的数据存储方式及其存储位置

  • SharedPrefrence存储

1). 位置

          /data/data/packageName/shared_prefs/xxx.xml
     2). 特点
          a. 小数据 key--value
          b. 应用卸载时会自动删除此数据
     3). 相关API

      接口/类:
          1). 它是用来做什么的
          2). 如何得到它的对象? 不是new, 而是通过别的对象得到
          3). 能用对象做什么事?  有哪些常用的方法
  •  手机内部文件存储
     1). 位置
          /data/data/packageName/files/文件
     2). 特点
          a. 较大的数据/图片
          b. 应用卸载时会自动删除此数据
     3). 相关API
          

  • 手机外部文件存储
     1). 位置
            
     2). 特点
 
     3). 相关API

   比较内部文件与外部文件存储?
     1). 存储空间的大小
     2). 是否是私有的
     3). 应用卸载是否自动删除
  •  Sqlite数据库存储
1). 路径
     /data/data/packageName/databases/xxx.db
2). 特点
     存储有一定关系结构的数据
     应用卸载是自动删除
3). sqlite的特点
     小
     快
 
4). 相关API

5). Android单元测试

  • 远程服务器存储
            1). 存储的位置
                  远程服务器上

          2). 特点
                1). 必须联网请求
                2). 只能在分线程执行
                3). 需要声明权限
3). 实现联网请求的技术
     1). 原生的: HttpUrlConnection/URL
     2). 包装的: HttpClient/HttpGet/HttpPost/HttpResponse/HttpEntity
     3). 框架: Volley/Xutils (异步网络请求)
          a. 不需要我们启动分线程, 框架内部接收到请求后自动会在分线程
          b. 如何返回给你结果数据?   切换到主线程调用监听器的回调方法

4). HTTP协议:

5). 搭建服务器端

a. 安装并配置tomcat

b. 将tomcat关联eclipse中

c. 创建一个动态的web project

d. 把需要直接访问的资源(jsp/apk/image)放在WebContent下

c. 可能需要创建Servlet/Filter

d. 运行

f. 访问:   http://ip:8080/xxxx/index.jsp

6).实现联网请求功能的3步:

     a. 主线程, 显示提示视图(ProgressDialog/ProgressBar)
     b. 分线程, 联网请求, 并得到响应数据
     c. 主线程, 显示数据

文件访问权限
* 指的是谁能访问这个文件
* 在Android中,每一个应用,都是一个独立的用户
* 使用10个字母表示  drwxrwxrwx
* 第一个字母:
    * d:表示文件夹
    * -:表示文件
* 第一组rwx:表示的是文件拥有者(owner)对文件的权限
    * r:read,读
    * w:write
    * x:execute
* 第二组rwx:表示的是跟文件拥有者属于同一用户组的用户(grouper)对文件的权限
* 第三组rwx:表示的其他用户(other)对文件的权限

在内部存储空间中读写文件

小案例:用户输入账号密码,勾选“记住账号密码”,点击登录按钮,登录的同时持久化保存账号和密码

布局文件:

<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"
tools:context=".MainActivity"
android:orientation="vertical" > <EditText
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="用户名:" /> <EditText
android:id="@+id/et2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="密 码:" /> <CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住用户名和密码" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="login"
android:text="登 录" /> </LinearLayout>
public class MainActivity extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void login(View v){
EditText et1 = (EditText) findViewById(R.id.et1);
EditText et2 = (EditText) findViewById(R.id.et2); String username = et1.getText().toString();
String pwd = et2.getText().toString();
// 判断用户是否勾选保存账号密码
CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);
if(cb.isChecked()){
//将用户名和密码写到本地文件,用IO流来写
File file = new File("data/data/com.example.cunchu/info.txt");//内部存储空间的路径
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
fos.write((username+"####"+pwd).getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
System.out.print("登录成功!!!");
Toast.makeText(this,"登录成功!!!", Toast.LENGTH_SHORT).show();
} } public void read(){
try {
FileInputStream fis = new FileInputStream("data/data/com.example.cunchu/info.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String text = br.readLine();
String []s = text.split("####");
EditText et1 = (EditText) findViewById(R.id.et1);
EditText et2 = (EditText) findViewById(R.id.et2);
//读取到数据之后,回显至输入框
et1.setText(s[0]);
et2.setText(s[1]); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

运行结果:

使用路径api读写文件
getFilesDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/files
    * 存放在这个路径下的文件,只要你不删,它就一直在
getCacheDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/cache
    * 存放在这个路径下的文件,当内存不足时,有可能被删除

系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西

如果有时需要直接复制项目
需要改动的地方:
    * 项目名字
    * 应用包名
    * R文件重新导包

在外部存储空间中读写文件

   在内部存储读写和外部存储 读写 文件,都是用IO流读写,不同的是,路径不同。

Android开发学习——android数据存储的更多相关文章

  1. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

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

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

  3. Android开发学习——android存储

    Android的存储 内部存储空间RAM内存:运行内存,相当于电脑的内存ROM内存:存储内存,相当于电脑的硬盘外部存储空间 SD卡:相当于电脑的移动硬盘    * 2.2之前,sd卡路径:sdcard ...

  4. Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

    一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/fi ...

  5. Android开发-API指南-数据存储

    Storage Options 英文原文:http://developer.android.com/guide/topics/data/data-storage.html 采集日期:2015-02-0 ...

  6. Android开发手记(18) 数据存储三 SQLite存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...

  7. Android开发手记(17) 数据存储二 文件存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...

  8. Android开发手记(20) 数据存储五 网络存储

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 安卓的网络存储比较简单,因为A ...

  9. Android开发手记(19) 数据存储四 ContentProvider

    转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1.SharedP ...

随机推荐

  1. JSP中的编译指令和动作指令的差别

    JSP中的编译指令和动作指令的差别 1.编译指令是通知Servlet引擎的处理消息.而动作指令仅仅是执行时的脚本动作 2.编译指令是在将JSP编译成Servlet时起作用,而动作指令可替换成JSP脚本 ...

  2. HTTP错误 404.17 - Not Found" IIS 7.5

    出现这种情况的原因通常是因为先安装了Framework,后安装的IIS: 运行cmd,输入: C:\Windows\Microsoft.NET\Framework\V4.0.30319\aspnet_ ...

  3. 记一次UICollectionView中visibleCells的坑

    记一次UICollectionView中visibleCells的坑 项目的要求是这样的 其实也是一个轮播图,而已,所以依照轮播图的实现原理,这里觉得也很简单,还是利用UICollectionView ...

  4. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  5. 2016/2/25 1、<表单验证<form></form> 2、正则表达式 3、事件

    1.<表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电 ...

  6. ubuntu 文件及子文件夹的权限的查看及修改

    查看linux文件的权限:  查看path路径下名为filename的文件或文件夹的权限:   * -R   结果:全部子目录及文件权限改为 777

  7. bzoj2823: [AHOI2012]信号塔&&1336: [Balkan2002]Alien最小圆覆盖&&1337: 最小圆覆盖

    首先我写了个凸包就溜了 这是最小圆覆盖问题,今晚学了一下 先随机化点,一个个加入 假设当前圆心为o,半径为r,加入的点为i 若i不在圆里面,令圆心为i,半径为0 再重新从1~i-1不停找j不在圆里面, ...

  8. codeforces 682D D. Alyona and Strings(dp)

    题目链接: D. Alyona and Strings time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. memcached value最大限制只能是1M吗

    关于memcached的value最大是1M的限制很多人都知道,但是如果你以为我还要说这个事情,那你就错了. 之前的老版本确实是只能是1M,但是根据git记录,其实2009年以后的版本这个value最 ...

  10. jsp 中href链接有前缀

    在jsp页面中,如果有一个链接写为:“href="www.hqvolunteer.org"”(链接到的是外网),这样发布项目了后,把鼠标移到上面显示的是:你的项目路径/www.hq ...