安卓学习之数据存储

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

方法一.保存文件路径的方式对文件进行存储

前面是将数据保存到应用的内部:文件路径:/data/user/0/com.example.qqlogindemo/files

           1)通过点击事件处理

          

          2)HandlerLoginEvent()方法事件处理

/**
     * 处理登录事件
     */
    private void handlerLoginEvent(View v) {
        //拿到界面上输入的账号和密码
        String passwordText = password.getText().toString();
        String accountText = account.getText().toString();

        //将账号和密码保存起来
        SaveUserInfo(passwordText,accountText);
    }

    private void SaveUserInfo(String passwordText, String accountText) {
        //获取文件保存路径
        File filesDir = this.getFilesDir();
        //获得缓存文件保存路径
        File cache = this.getCacheDir();

        Log.d(TAG,"缓存文件路径"+cache.toString());
        Log.d(TAG,"文件路径"+filesDir.toString());

        File saveFile = new File(filesDir,"info.text");
        try {
        if(!saveFile.exists()){
                saveFile.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(saveFile);
        //存储信息
        fos.write(("账户:"+accountText +"密码"+passwordText).getBytes());
        fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

对数据进行判空检查

①使用TextUtils.isEmpty()方法

//判断密码不许空
        if(TextUtils.isEmpty(accountText)){
            Toast.makeText(this,"账号不许为空!",Toast.LENGTH_SHORT).show();
            return;
        }

        //判断账号不许为空
        if(TextUtils.isEmpty(passwordText)){
            Toast.makeText(this,"密码不许为空!",Toast.LENGTH_LONG).show();
            return;
        }

②使用字符串长度判空

        if(passwordText.length() == 0){
            Toast.makeText(this,"密码不许为空!",Toast.LENGTH_LONG).show();
            return;
        }

        if (accountText.length() == 0){
            Toast.makeText(this,"账号不许为空!",Toast.LENGTH_SHORT).show();
            return;
       }

Toast显示内容,时间有限

3)对数据进行读出操作

①将数据读出时,首先重写Android的生命周期函数onResume(),将保存在文本文件中的方法读出

 

②将保存的数据进行分割,分割不清楚应先System.out.println()将分割的字符串打印出来

③将所得到的正确账号信息写入

 

方法二.安卓持久化存储

D/MainActivity: 缓存文件路径

/data/user/0/com.example.qqlogindemo/cache

//获取文件保存路径
File filesDir = this.getFilesDir();

//获得缓存文件保存路径
File cache = this.getCacheDir();

Android上面有两部分存储空间,一部分内部存储空间:ROM,例如Window电脑的系统盘,二是外置存储空间,也就是SD卡,类似于电脑的外插存储设备。

 

解决SD卡内容不能写入的问题:转载回答

Android 6.0以后的版本报错:open failed: EACCES (Permission denied)

 

SD卡的路径获取:通过API获取

//拿到SD卡的路径
File externalStorageDirectory = Environment.getExternalStorageDirectory();

检查是否有sd卡挂载

public void onClick(View v) {
                if (v == check) {
//提供的API判断是否有sd卡挂载
                    String state = Environment.getExternalStorageState();
                    if (state.equals(Environment.MEDIA_MOUNTED)) {
                        Log.d(TAG, "SD卡已经挂载!");
                    } else if (state.equals(Environment.MEDIA_UNMOUNTED)){
                        Log.d(TAG, "SD卡尚未挂载!");
                    }
                }
            }
        });

获取SD卡的大小

public void onClick(View v) {
        File directory = Environment.getExternalStorageDirectory();
        long space = directory.getFreeSpace();
        String s = Formatter.formatFileSize(this, space);
        Log.d(TAG, "剩余空间为:" + s);
    }

 注意:this实现的是Context父类,用匿名内部类来实现this表示的是new View.OnClickListener(),并未实现activity的方法。

 

 

方法三.SharePreferece

一般用于保存条目,比如设置条目,按钮Switch。

sharepreference一般用于储存配置信息,比如说是否是第一次启动呀,这个应用的id号,用户的账号和加密以后的密等等

SharedPreferences保存到哪里去了?

SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件

SharePreferece也是属于内部存储,跟file/cache一样,在data/data包名下进行保存,以XML形式保存,内容都是以键值对的形式进行保存。

注意:Preferences只能在同一个包内使用,不能在不同的包之间使用。

-使用步骤:

保存数据

1).拿到Sharepreferece

Setting_Info = this.getSharedPreferences("setting_info", MODE_PRIVATE);

this指的就是上下文Context,因为Activity间接继承了Context,所以在Activity里面直接使用this。

2).进入编辑模式,拿到编辑器(在点击事件处理中进行)

SharedPreferences.Editor edit = Setting_Info.edit();

3).保存数据  (保存的数据类型有多种)

edit.putBoolean("state",isChecked);

4).提交编辑器进行保存

edit.commit();

详细过程:

protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preferece_demo);
        unSwitch = (Switch)this.findViewById(R.id.unknown_switch);
        unSwitch.setOnCheckedChangeListener(this);
        Setting_Info = this.getSharedPreferences("setting_info", MODE_PRIVATE);

    }
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Log.d(TAG," "+isChecked);
        //保存数据
        SharedPreferences.Editor edit = Setting_Info.edit();
        edit.putBoolean("state",isChecked);
        edit.commit();
    }

回显数据:

(在Oncreate()里面进行回显):数据回显和保存均需要getSharedPreference()

//回显数据
Setting_Info = this.getSharedPreferences("setting_info", MODE_PRIVATE);
boolean state = Setting_Info.getBoolean("state", false);     //false是默认值
unSwitch.setChecked(state);

数据清除:(每一次实行都得提交数据)

 SharedPreferences Setting_Info= getSharedPreferences("Setting_Info", MODE_PRIVATE);
        SharedPreferences.Editor edit = userInfo.edit();//获取Editor
        edit.remove("state");
        edit.commit();

清空所有的数据:(每一次实行都得提交数据)

SharedPreferences Setting_Info= getSharedPreferences("Setting_Info", MODE_PRIVATE);
        SharedPreferences.Editor edit = Setting_Info.edit();//获取Editor
        edit.clear();
        edit.commit();

记得最后commit();

 

 

 

解决E/SharedPreferencesImpl: Couldn‘t create directory for SharedPreferences file /data/user/0/com.exa Couldn't create directory for SharedPreferences file问题描述:解决方法: E/SharedPreferencesImpl: Couldn't create directory for SharedPreferences file /data/user/0/com.examp 意思为:不能在“/data/user/0/com.example.”目录下创建文件 问题描述: 安装你的app后卡在起始界面或者加载不出来下一界面 解决方法: 手动给你的app存储 阅读详情

相关推荐

Android-入门教程-内部存储/外部存储-概览

数据和文件存储概览 | Android 开发者 | Android Developers 示例 adb shell "find / -name com.tencent.mm 2>/dev/null" adb shell "find / -name DCIM 2>/dev/null" adb shell ls -l /sdcard adb shell ls -l /storage/self 参考资料: Android内、外存储 易混淆点剖析【/m...

深度安全实验室 1万+

无法进入到/data/data/com.example.databasetest/databases/目录

1:先直接说我的问题和解决方案:我没跑程序,数据库还没创建(有点憨),方案嘛,大家都知道了! 2:【若你不是这类问题,可参考以下链接:文章】 3:以下是我的分析过程,没兴趣的可以不看: /当我运行命令cd /data/data/com.example.databasetest/databases/时,显示no such file or directory,于是百度后,我用cd /data/dat...

Ael的博客 2737

Drupal远程代码执行漏洞(CVE-2018-7600)实战复现:从检测到写入WebShell的全过程

本文详细解析了Drupal远程代码执行漏洞(CVE-2018-7600)的实战复现过程,从环境搭建、漏洞检测到WebShell写入的全流程。该高危漏洞影响Drupal 6.x至8.x版本,允许攻击者未经授权执行任意代码。文章提供了多种POC构造方法和高级利用技巧,帮助安全研究人员深入理解漏洞原理并掌握验证技术。

weixin_29322553的博客 258

java.io.FileNotFoundException: /data/user/0/com.xx.xx/files/com_alibaba_aliyun_crash_defend_sd

java.io.FileNotFoundException: /data/user/0/com.dfsk.fengon/files/com_alibaba_aliyun_crash_defend_sdk_info_com.dfsk.fengon:channel (No such file or directory) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.op...

嗯... 6万+

Android 使用adb shell 查看sqlite数据库

android中的多媒体数据库存放路径如下: /data/user/0/com.android.providers.media/databases 1.查看是否有设备 E:\ProjectSpace\xxxx>adb devices List of devices attached 192.168.21.170:5555 device 2.adb shell命令 E:\Proj...

皮卡丘的博客 2732

基于Android studio学习安卓数据存储

在移动应用开发中,数据存储是一个非常重要且必不可少的技术。无论是保存用户的信息、记录应用的状态,还是缓存网络请求的数据,数据存储都是必须处理的需求。而在安卓开发中,我们有许多选项可以选择来进行数据存储。下面我们介绍几种安卓的常见的数据存储方式,包括Shared Preferences、数据库存储等。在Android中,SharedPreferences是一种轻量级的存储机制,用于存储和检索键值对数据。它提供了一种简单的方法来保存应用程序的持久化数据,包括用户首选项、设置信息、应用程序状态等。

qq_30665153的博客 3578

2024年Android最全安卓学习之七----数据存储,ios大厂面试

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2401_84520271的博客 844

安卓学习笔记-数据存储

本文是《安卓学习笔记-声明式UI》的续篇,重点探讨数据存储层与业务逻辑层的解耦。

wy53111的博客 974

安卓基础学习_ Android数据存储与IO

数据储存方式: 1.文件 2.SharesPreferences(偏好参数保存) 3.SQLite数据库 4.内容提供者(数据共享) 5.网络 一、SharePreferences偏好参数 SharesPreferences保存用户偏好参数(XML文件形式保存在shared_prefs下) public void save(String username,Integer pas

On The Way 1105

安卓数据存储学习总结

安卓数据存储方式大概有四种: 一、sdcard文件 数据区中的文件只能被自己的程序访问,存放路径为data/data/程序名/文件名 写入: private void writefile(String str, String path) { // TODO Auto-generated method stub File file; try { file = new F

TO TOP CODER 1236

安卓开发之数据存储学习

安卓原生的数据存储方式主要有三个: 1是文件存储;2是SharedPreferences存储,在安卓软件分析中经常会看到里面明文存储着用户名与密码;3是SQLite数据库存储 分别存储的位置在/data/data/包名/File、/data/data/包名/SharedPeference、/data/data/包名/SQLite。 文件存储 ...

iris的博客 594

第七章 数据存储Android基础学习

第七章 数据存储Android基础学习】前言版权推荐开源第七章 数据存储7-1 SharedPreferences 轻量数据存储7-2 File7-2-1 Android存储概念7-2-2 File 内部存储7-2-3 File 外部存储最后 前言2024-6-10 20:55:08推荐【天哥】Android开发视频...

weixin_35812582的博客 162

Android学习——数据存储

Android中,提供了三种数据存储的途径,和两种存储方式。三种途径:l  系统配置(Shared Preferences):这类应用主要是系统的配置信息的保存,比如我给程序界面设置了颜色,我想在下一次启动时还是能够保留上次设置的颜色。由于Android系统的界面是采用Activity栈的形式,在系统资源不足时,会收回一些界面,那么,我想有些操作也是需要在不活动时保留下来的,等再次激

烈火青春 1万+

【鼠】安卓学习杂记(十一)——Android数据存储之SharedPreferences

一、适用范围保存少量数据的场景,登录账号、密码等二、概述SharedPreferences是用键值对的方式来存储数据的;也就是说,当保存一条数据的时候需要给这条数据提供一个键,然后通过这个键取得数据的值;而且,SharedPreferences支持多种数据类型的存储。三、提交数据                //第一步:SharedPreferences创建对象 ...

訾博(ZiBo)的博客 179

android学习笔记の数据存储

SharedPreference SharedPreference主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成。 类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问。 例子: 工程1: Java代码 SharedPreference

android_he的专栏 669

Android学习数据存储

Android数据存储: SharedPreferences:适用于轻量级数据存储,如用户设置等。 SQLite:关系型数据库,适合存储结构化数据,支持SQL查询。 文件存储:包括内部存储和外部存储,可用于存储图片、音频等文件。内部存储文件私有,外部存储需处理权限。 Application类:全局数据存储,通过继承Application类,在其内部定义静态变量来存储全局数据。 Content Provider:实现跨应用数据共享,通过定义URI和数据访问权限,允许其他应用访问本应用。

m0_75208773的博客 1992

安卓学习笔记——数据存储之SharedPreference

Android提供了四种数据存储的方式 SharedPreference:一种常用的数据存储方式,其本质是基于XML文件存储键值对数据,通常用来存储一些简单的配置信息。 SQLite:一个轻量级数据库,支持基本SQL语法,是Android系统中常被采用的一种数据存储方式。 ContentProvider:Android系统中能实现应用程序之间数据共享的一种存储方式。 文件:即常说的文件存储方法,常用于存储数据量比较大的数据,但缺点是更新数据困难。 SharedPreference: 1、SharedPr

fuzhijieabc的博客 2094

Android学习数据存储

Android数据存储 1. 主界面XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation=

wuweiwei001的专栏 320

安卓学习数据存储(六)

一、文件存储 写入文件 openFileOutput将数据存储到指定的文件当中去。第一个是文件名,第二个是文件的操作模式,MODE_PRIVATE为默认,会覆盖之前内容,MODE_APPEND会追加内容。默认存储到/data/data/pacak name/file下 获得FileOutputStream对象,借助他构建OutputStreamWriter对象,在构建BufferedWriter...

heihei 256

Android开发——前面全部关于android开发学习的源码:组件、动态功能、数据存储

Android开发——前面全部关于android开发学习的源码:组件、动态功能、数据存储 一个总工程,全部代码图片都在里面。 链接:https://pan.baidu.com/s/1I9rhUTl2OeBtW6cQVswQ6Q 提取码:lf6i ...

奔跑的狮子 373
上一篇: 安卓学习之按钮点击事件
下一篇: 安卓学习之数据库基础
北风w
博客等级 码龄9年 191粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值