精华内容
下载资源
问答
  • sharedpreferences读取文件
    2015-09-22 20:24:28

    今天我们讲下SharedPreferences的使用,就是读取或写入数据到内存中,比较简单,我们直接看代码吧。

    package com.example.sharedpreferences_01;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.util.Log;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    	
    	private SharedPreferences pref;
    	Editor editor;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //实例化一个SharedPreferences对象
            pref = getSharedPreferences("myPref", MODE_PRIVATE);
            //实例化editor对象的方法
            editor = pref.edit();
            //存放数据
            editor.putString("name", "张三");
            editor.putInt("age", 20);
            editor.putBoolean("isMarry", false);
            editor.putLong("time", System.currentTimeMillis());
        
            editor.commit();
            editor.remove("time");
            editor.commit();
            
            Log.i("main", pref.getString("name", ""));    //获取数据
            Log.i("main", "" + pref.getInt("age", 0));
            
        }
    
        
    }

    更多相关内容
  • 主要介绍了Android使用SharedPreferences存储XML文件的实现方法,实例分析了SharedPreferences类的基本初始化与文件存储相关技巧,需要的朋友可以参考下
  • 使用SharedPreferences读写数据的步骤

    千次阅读 2018-06-15 11:23:04
    一、写入数据: 1、调用Context对象的getSharedPreferences(文件名,文件的操作模式)得到SharedPreferences对象 this.sharedPreferences=this.getSharedPreferences(fileName, Context.MODE_PRIVATE); 2、调用...

    一、写入数据:

        1、调用Context对象的getSharedPreferences(文件名,文件的操作模式)得到SharedPreferences对象

                this.sharedPreferences=this.getSharedPreferences(fileName, Context.MODE_PRIVATE);

        2、调用SharedPreferences对象的edit()方法得到Editor对象

               SharedPreferences.Editor editor=this.sharedPreferences.edit();

        3、调用编辑器对象的putXXX(key,value)设置需要保存的数据

              editor.putString("userName",userName);

        4、调用编辑器对象的commit()方法提交数据

                editor.commit();


    二、读取数据:

        1、调用Context对象的getSharedPreferences(文件名,文件的操作模式)得到SharedPreferences对象

               this.sharedPreferences=this.getSharedPreferences(fileName, Context.MODE_PRIVATE);

        2、调用SharedPreferences对象的getXXX(key,[默认值])根据指定的键获取数据,如果键不存在则返回默认值

                String userName=this.sharedPreferences.getString("userName","");

        



    注意:this.sharedPreferences=this.getSharedPreferences(fileName, Context.MODE_PRIVATE)中:

                    第一个参数为文件名,文件名不用加扩展名,系统会自动加上.xml扩展名
                    第二个参数:
                       Context.MODE_PRIVATE=0:代表当前文件只能供本应用程序使用,其它应用程序无法访问本文件.每次写入新数据时都会覆盖之前写的数据。
                       Context.MODE_APPEND:追加模式,代表当前文件只能供本应用程序使用,其它应用程序无法访问本文件,但每次写入新数据会追加到之前数据的后面。
                       Context.MODE_WORLD_READABLE=1:只读模式,代表当前文件所有应用程序都可以读取,但不能写入数据。
                       Context.MODE_WORLD_WRITEABLE=2:写入模式,代表当前文件所有应用程序都可以写入数据,但不能读取数据。
                    实现读写模式:
                        Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE=3
                        Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE=3

        

    展开全文
  • SharedPreferences 提供永久存储本地键值对的功能 1.读取 share.getString("account","");//第二个参数是获取不到内容适合返回的 2.设置 editor.putString("account",accountStr);//可以设置多种基本类型数据 ...

    SharedPreferences 提供永久存储本地键值对的功能

    1.读取  share.getString("account","");//第二个参数是获取不到内容适合返回的

    2.设置  editor.putString("account",accountStr);//可以设置多种基本类型数据

     

    多种操作模式

    1. Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND

    2. Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,

    3. Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;

    4. //如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE

     

    package com.example.handleproject;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class SharePreerenceActivity extends AppCompatActivity {
        private TextView account;
        private  TextView pass;
        private Button btn;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_share_preerence);
            account=findViewById(R.id.account);
            pass=findViewById(R.id.pass);
            btn=findViewById(R.id.button);
            SharedPreferences share=getSharedPreferences("setting",MODE_PRIVATE);
            String accStr=share.getString("account","");//第二个参数是获取不到内容适合返回的
            String pwdStr=share.getString("pass","");
            account.setText(accStr);
            pass.setText(pwdStr);
    
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String accountStr=account.getText().toString();
                    String passStr=pass.getText().toString();
                    if(accountStr.equals("admin")&&passStr.equals("123456")){
                        //1、打开Preferences,名称为setting,如果存在则打开它,否则创建新的Preferences
                        SharedPreferences settings = getSharedPreferences("setting", MODE_PRIVATE);
                        //2、让setting处于编辑状态
                        SharedPreferences.Editor editor = settings.edit();
                        //3、存放数据
                        editor.putString("account",accountStr);
                        editor.putString("pass",passStr);
                        //4、完成提交
                        editor.commit();
                        Toast.makeText(SharePreerenceActivity.this,"保存成功",Toast.LENGTH_SHORT).show();
    
                    }
                    else{
                        Toast.makeText(SharePreerenceActivity.this,"请输入admin&&123456",Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
    

     

    androidStudio查看存储的文件地址

    做了上面的操作,其实他的本质是个文件存储操作,可以在编辑器查看最终存储的内容以及位置

    在菜单栏 view->tool-window->device-file-explorer里面可以打开文件管理器

    在data/data/[包名]、shared_refs 里面可以找到文件setting.xml和我们做的存储操作

    SharedPreferences settings = getSharedPreferences("setting", MODE_PRIVATE);

    红色字体部分是一样的,也就是表示setting其实就是我们存储数据的一个文件名,如果想在新的文件存储数据,就换一个新的文件名

     

    展开全文
  • 由于项目需要使用到涉及到Android文件的保存及读取,那就学呗。 原先的计划是使用文本进行保存,数据格式使用Json。 后面发现了SharedPreferences存储,一步到位,我喜欢。 内存&外存 1 开始之前,我们先来区分...

    前言

    由于项目需要使用到涉及到Android文件的保存及读取,那就学呗。
    原先的计划是使用文本进行保存,数据格式使用Json
    后面发现了SharedPreferences存储,一步到位,我喜欢。
    在这里插入图片描述

    内存&外存 1

    开始之前,我们先来补充一下安卓中内部存储外部存储的概念。
    当然标题所说的内存并不是手机上的运行内存…而是指手机的内部存储

    内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。

    至于外部存储,在4.4(API19)之前,将手机自身带的存储卡划分为内部存储,而扩展的SD卡就是外部存储。但是从Android4.4开始,Google机身存储(内置存储)在概念上分成了内部存储 (internal)外部存储 (external) 两部分。

    在这里插入图片描述
    那么怎么区分机身存储外部存储SD卡外部存储呢?对,SD卡也是外部存储,那怎么区分呢,在Android 4.4以后的系统中,API提供了这样一个方法来遍历手机的外部存储路径:

            File[] files;
            //API > 19(Android 4.4)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
                for(File file:files){
                    Log.e("main", String.valueOf(file));
                }
            }
    

    荣耀小7遍历结果:
    在这里插入图片描述
    可以看到它们都位于/storage下:

    • /storage/emulated/0是机身存储
    • /storage/BE16-1E17是外部存储

    关于文件路径,可能需要先了解一下linux文件挂载,这里不展开。

    由于内部存储相对于外部存储更外宝贵,因而文件存储的常规操作是:先检测有无外部存储(SD卡),无外部存储时再使用机身存储。

    SharedPreferences

    不同于文件存储,SharedPreferences使用键值对的形式保存,即在保存时需要提供一个字符串作为键值,在读取数据时就可以通过键值把对应的数据读取出来。官方文档提醒您:该类不支持跨进程使用
    在这里插入图片描述

    存储格式:XML

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <map>
    	<!--类型 name = "键值" value = "数据"/-->
        <int name="25" value="625" />
    </map>
    

    保存

    想要使用SharedPreferences进行存储,首先需要获取到SharedPreferences对象

    上面的例子,使用的是Context类中的getSharedPreferences()方法。

    	SharedPreferences getSharedPreferences (String name,int mode)
    

    其他参数如下:

    • name:文件名,如果指定的文件不在,则会创建一个。

    • mode:模式,目前只有 MODE_PRIVATE 一种可选项,当然使用0的效果也是一样的。

      • MODE_PRIVATE:只有当前应用程序才能对这个SharedPreferences文件进行读写。
      • MODE_WORLD_READABLEAndroid 4.2+ 弃用
      • MODE_WORLD_WRITEABLEAndroid 4.2+ 弃用
      • MODE_MULTI_PROCESSAndroid 6.0+ 弃用

    除此之外,我们还可以通过以下方法获取SharedPreferences对象
    Activity类的getPreferences()方法。

    SharedPreferences getPreferences(@Context.PreferencesMode int mode)
    

    该方法与getSharedPreferences()类似,但它只有一个参数mode,文件名则是当前Activity的类名。

    取得SharedPreferences对象后,我们可以通过edit()方法获取其Edit对象,通过Edit对象可以修改内存中的SharedPreferences的数据,再原子地提交到硬盘SharedPreferences。(没有理解错的话)

    例如我们要添加文本数据,则使用putString();需要添加整型数据,则使用putint()…就不一一列举了。

    此外,Edit类还为我们提供了clear()方法以清空数据。

    修改完以后就是提交,目前提交有两种方法:

    • apply():立即将其更改提交到内存,对机身存储进行异步提交,且不会收到任何故障警告。
    • commit():同步地写到持久性存储SharedPreferences中,因此我们应避免在主线程中直接使用它

    下面给出一个简单的文件保存示例:

    sharedPreferences = getSharedPreferences("SharedPreferences", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    
                    editor.putString("test",editText.getText().toString());
                    editor.apply();
                    //editor.commit();
    

    保存路径(需root用户才能看到)

    那么保存的文件存储再哪里呢?

    目前使用模拟器寻得的路径为:/data/data/pagename(包名)/shared_prefs
    在这里插入图片描述
    而在未获取root权限的手机上是无法直接查看到该文件的。

    而目前接触的真机基本都是未获取root权限的;手机上看不到文件,心里虚得慌怎么办?

    放心,我们可以在读取文件的地方debug一下,直接查看获取到的SharedPreferences对象
    在这里插入图片描述
    可以发现,该demo荣耀小7上运行时,文件是存储在机身存储上的。

    读取

    可能要让你失望了,读取的方法比保存更为简单。

    首先同样是取得SharedPreferences对象,这点和上面是一样的。

    随后我们就可以通过get()方法取得我们所需要的数据(只要它在SharedPreferences中)。

    每一个Editorput()方法,在SharedPreferences中都能找到一个get()方法将数据取出。

    下面直接看例子:

    String value = sharedPreferences.getString("test","Null");
    
                    textView.setText(value);
    

    demo效果

    在这里插入图片描述

    这是在学习之前,自己问自己的问题,这里给出答案

    Q:保存为同名SharedPreferences文件,会造成文件覆盖吗?
    若文件已存在则不会覆盖,而是追加内容。
    若追加同键值内容则会造成覆盖,否则添加新的键值对。

    局限性 2:

    SharedPreferences虽好,但不可滥用

    • value内容不宜过大

      • 第一次从SharedPreferences中获取值的时候,有可能阻塞主线程,使界面卡顿、掉帧。

      • 解析SharedPreferences的时候会产生大量的临时对象,导致频繁GC,引起界面卡顿。

      • 这些keyvalue会永远存在于内存之中,不会被释放。

    • 存储JSON特殊符号很多的value

      • JSON或者HTML格式存放在SharedPreferences里面的时候,需要转义,这样会带来很多 &这种特殊符号,SharedPreferences在解析碰到这个特殊符号的时候会进行特殊的处理,引发额外的字符串拼接以及函数调用开销。
    • 多次edit()多次apply()

      • 每次edit()都会创建一个Editor对象,额外占用内存;当然多创建几个对象也影响不了多少;但是,多次apply()也会卡界面你造吗?
    • 至于跨进程,这个SharedPreferences类开篇就澄清了, 不支持跨线程
      而容易让人引起误解的MODE_MULTI_PROCESS模式也于Android6.0弃用了。

    在这里插入图片描述

    结语

    本文只是简单的介绍了如何使用SharedPreferences进行文件的读写。在此需要注意的是,当设备内部空间不足时,Android可能会删除缓存文件回收空间,但是我们不应该依赖系统为我们清理这些文件,而应始终自行维护缓存文件,使其占用空间保持在合理的范围内(例如1M)。因此我的操作是,每次打开文件写入前,先用clear()清空。

    由于博主才疏学浅,若发现文章内容有误,欢迎各位大佬留言指正,不吝赐教。

    在这里插入图片描述

    Demo源码下载地址

    百度云地址 - 提取密码:cca3

    参考鸣谢


    1. 彻底搞懂Android文件存储—内部存储,外部存储以及各种存储路径解惑 ↩︎

    2. 请不要滥用SharedPreference ↩︎

    展开全文
  • 本文介绍SharedPreferences的读与写的实现思路,感兴趣的朋友可以了解下
  • 使用SharedPreferences读写数据

    千次阅读 2013-07-02 01:34:40
    随时随地阅读更多技术实战干货,获取...1.SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的键值对。SharedPreferences接口提供了如下常用方法来访问SharedPreference...
  • SharedPreferences保存文件文件读取

    千次阅读 2015-05-08 11:50:07
    在用普通的方法同时保存用户名和密码时,中间必须要有一个分隔符来区分用户名和密码,... 用SharedPreferences保存文件的方法就可以解决这个问题: Context context=new Context(); SharedPreferences sp= context
  • } /** * 获取用户信息 * @param context 调取上下文信息 * @return */ public static User getUserInfo(Context context){ SharedPreferences sp=context.getSharedPreferences(Constant.SP_FILE_NAME,Context.MODE...
  • 目录 文件存储 保存数据 保存输入框中的数据 读取数据 SharedPreferences存储 获取SharedPreferences对象 使用SharedPreferences保存数据 读取SharedPreferences数据 SQLite数据库存储 文件存储 文件存储是 Android ...
  • 主要介绍了Android编程之SharedPreferences文件存储操作方法,实例分析了SharedPreferences文件操作的相关技巧,非常具有实用价值,需要的朋友可以参考下
  • 代码如下,submit按键测试SharedPreferences功能,存储的是程序启动的次数,write按键是写入文本文件,read按键是将文本内容写入标题栏。 xml代码: Activity.java代码: package com.example.myapplication...
  • 前情提要2 :动态页面-简单保存QQ密码(数据存储:文件存储、SharedPreferences) 【https://blog.csdn.net/weixin_44949135/article/details/104965413】 验证QQ密码 ,在前情提要2的基础上,实现了如下功能: ...
  • 持久化技术简介 ...文件存储是 Android 中最基本的数据存储方式,它不对存储的内容进行格式化处理,所有数据都是原封不动的保存到文件当中,适合存储一些简单的文本数据或二进制数据 Context 类提供了一个 ope.
  • android 使用SharedPreferences对数据存储/删除/读取/文件删除
  • SharedPreferences 保存读取数据, 使用AutoCompleteTextView 和SharedPreferences 实现历史记录提示。调用文件管理器自定义路径读取文件
  • SharedPreferences存储

    2021-09-13 14:58:24
    3. 读取SharedPreferences文件中存储的数据 4.运用 Android系统提供了轻量级的数据存储方式——SharedPreferences存储。它屏蔽了对底层文件的操作,通过为程序开发人员提供简单的编程接口,实现以最简单的方式对...
  • SharedPreferences sharepreferences是Android中最轻量级的数据存储. 原理相信很多人也很清楚, 这里简单再介绍以下. 系统提供了SharedPreferences这个类, 所有用这个类存储的内容都会放在 data/data/...
  • 文件存储】中查看设备保存的文件: 目录 activity_main <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=...
  • 文件存储 这里实现了一个存储EditText中输入内容与恢复 package com.example.filepersistencetest import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle ...
  • SharedPreferences自定义XML文件保存位置

    千次阅读 2016-12-27 15:03:20
    声明:本篇文章的相关...前言:因为之前的文件是保存在项目目录下的,所以只要软件卸载了,本地的XML也就没有了,所以需要一个把XML文件存在外面的方法,方法不过于重写、自己再写一个新的XML存取类。但是我发现了Ha
  • SharedPreferences存储数据及文件数据存储什么是内部、外部存储内部存储获得路径方法SharedPreferences存储外部存储获得公共目录方法文件读写 什么是内部、外部存储 内部存储 获得路径方法 context.getCacheDir() ...
  • Android SharedPreferences

    2021-01-03 16:57:11
    Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写文件。  MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他...
  • 程序的终归目的还是操作数据来达到实现一些特定功能,在Android中,我们可以通过操作文件或者使用SharedPreferences还有数据库来保存一些数据。首先来看一下Android文件读写:假设我们现在有这么一个需求:一个...
  • 1.SharedPreferences 本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name,int ...PRIVATE:指定该SharedPreferences数据只能被应用程序读写(2).Conte...
  • 界面文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android=...
  • 因此,我们来学习一下Android的另外一种存储方式,SharedPreferences存储,它是一种数据持久化的方式,它比文件存储更加简单易用。 将数据存储到SharedPreferences中 不同于文件存储的方式,SharedPreferences是使用...
  • 对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢? Android...
  • SharedPreferences 系列 《Android 之不要滥用 SharedPreferences》 《Android 之不要滥用 SharedPreferences(2)— 数据丢失》 ContentProvider 系列(待更) 《Android 存储选项之 ContentProvider 启动过程源码...
  • 我正在尝试通过另一个应用程序编辑一个应用程序的SharedPreferences ,我的代码是这样的try { Context plutoContext = getApplicationContext().createPackageContext("me.test",Context.MODE_WORLD_WRITEABLE);...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,672
精华内容 7,068
关键字:

sharedpreferences读取文件