zoukankan      html  css  js  c++  java
  • Android数据储存之SharedPreferences总结

    写在前面:本文是我参考李刚老师的《疯狂Android讲义》以及API所写的读书笔记,在此表示感谢,本人小白,如有错误敬请指教。

    SharedPreferences的使用背景

      有时候,应用程序有少量的数据需要保存,而这些数据的格式很简单,比如应用程序的配置信息,小游戏的玩家积分,队友这些数据一般使用SharedPrefences进行保存

    SharedPreferences的介绍:

    • SharedPreferences 保存的数据是简单的key-value
    • SharedPreferences 主要用于读取数据,而与之对应的SharedPreferences.Editor进行写入数据

    SharedPrefences的获取:SharedPreferences本身只是一个接口,无法直接创建只能通过contextgetSharedPreferences()的方法来获取。

    • getSharedPrefences(String name ,int mode) 参数介绍:

    API 上的介绍:

    Name:Desired preferences file.If a preferences file by this name does not exist,it will be created when you retrieve an editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). 

    Mode:Use 0 or MODE_PRIVATE for the default operation, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions. 

    //name:表示你期望访问对象的SharedPrefencesMode:指定访问权限,默认为MODE_PRIVATE,只能被本应用读取。

    SharedPrefenrences的常用方法:

    1.edit()的方法产生SharedPrefences.Editor对象与之配合使用

    2.getXXX(String key,XXX values):获取key对应的XXX类型的值

    3.getAll():返回所有的值

    4.contains(String key): 判断是否包含某一个key

    ============================================================================================================

    SharedPreferences.Editor总结:

    SharedPrefences相辅相成,写入数据

    常用方法:

    一定不能忘了commit的方法在执行若干操作之后,不然edit之前的操作不会产生什么效果。

    putXXX(String key XXX vules);key 中放XXX类型的值。

    remove(String key):移除某key下的所有值

    SharedPreferences的数据保存位置:

    SharedPreferences的数据总是以XML文件保存在data/data/<包名>目录下。

    第二部分:访问其他应用程序的SharedPrefences:

    由于:SharedPrefences是由context创建的所以访问其他应用程序的SharedPrefences关键是先创建出其他应用的context

    然后context调用getSharedPrefences(String name ,int mode);创建出SharedPrefences的对象,如需写入数据再调用SharedPrefences.edit()的方法来创建editor

    //注意:mode所代表的访问权限

    //mycontext=CreatePackageContext(Stringname, Context.CONTEXT_IGNORE_SECURITY)

     //name表示其他应用程序的包名,包名是应用程序的唯一标识。

    ==========================================================================================

    以下代码是用来创建一个简单的读取数据的事例,xml布局比较简单就是两个Button。主代码如下:

    package com.Lzt.shareddemo;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import android.support.v7.app.ActionBarActivity;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class MainActivity extends ActionBarActivity {
        SharedPreferences Prefences;
        SharedPreferences .Editor editor;
        Button bt1, bt2;
        Button bt3;
        
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Prefences = getSharedPreferences("Demo", MODE_WORLD_READABLE);
            editor = Prefences.edit();
            bt1 = (Button)findViewById(R.id.button1);
            bt2 = (Button)findViewById(R.id.button2);
            bt3 = (Button)findViewById(R.id.button3);
            bt1.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    String time = Prefences.getString("time",null);
                    int randmun = Prefences.getInt("randmun",0);
                    String result = time==null?"你还没写入数据啊":"你写入的时间为"+time+"
    你写入的数据为"+randmun;
                    Toast.makeText(MainActivity.this, result, 5000).show();
                    
                    
                    
                    
                }
            });
            bt2.setOnClickListener(new OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    //格式调用的方法
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日"+"hh:mm:ss");
                    //以key-values对来操作数据
                    editor.putString("time",sdf.format(new Date()));
                    //产生随机数的方法,病强制转换为Int
                    editor.putInt("randmun", (int) (Math.random()*100));
                    //editor的putXXX表示将XXX类型的数据写入
                    //editor与SharedPreferences的关系有点像Map里面的方法,editor用来写入数据,preferences则用来读出数据、
                    //editor.putInt("count", count++);
                    editor.commit();
                    //editor.commit()的方法不能忘了,不然以上所有写入的操作将无用
                    //boolean commit :调用该方法,提交修改
                }
                
            });
     
            
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
  • 相关阅读:
    【实践】腾讯云服务器发布项目
    【实践】jdbc批量插入数据
    【转载】jQuery Validate 菜鸟教程
    【转载】jQuery Validate验证框架 + CKEditor 无法验证问题的解决方法
    【实践】获取CKEditor的html文本、纯文本、被选中的内容及赋值
    CKEDITOR的内容js转码,C#控制器解码接收
    jQuery.qrcode生成二维码
    一个表中的两列与另一个表的一列关联的结果显示
    【转载】海明码求解公式规律(转载自计算机网络高分笔记)
    『实践』百度地图同时显示多个路书
  • 原文地址:https://www.cnblogs.com/taotaomajia/p/4452566.html
Copyright © 2011-2022 走看看