Android 初学之SharedPreference

本文介绍了Android中SharedPreferences的使用,包括如何访问本应用及另一个应用的SharedPreferences。SharedPreferences是轻量级的数据存储接口,用于存储应用的个人设置。文中通过MainActivity和SecondActivity的示例展示了在同一App内共享数据,以及通过获取其他应用的Context访问不同应用的SharedPreferences。
摘要由CSDN通过智能技术生成

SharedPreferences是安卓平台上一个轻量级的数据存储接口,一般将应用的个人设置或者需要保存的数据存放到一个xml文件中,Eclipse环境下是放到data\data\<项目资源包名>\shared_prefs\下,只有获得root权限的真机才能看到这个文件夹。

SharedPreferences作为一个公共接口,其源码分为了三个部分:

  1. 一个OnSharedPreferenceChangeListener()的调用接口,需要实现onSharedPreferenceChanged(),当SharedPreferences改变时调用这个方法。
  2. public interface Editor,该接口主要是一些putXXX()函数,完成了将基本数据类型存入sharedpreferences的实例中去。即这是一个存操作的函数集合;
  3. 若干个getXXX()函数,定义了从sharedpreferences实例中获取不同基本数据类型的方法。这是一个取操作函数集合;

既然,SharedPreferences是一个接口,那么如何获取一个实现了该接口的实例呢?Android中方法为Context.getSharedPreferences(String,int),第一个参数表示该sharedpreferences的名称,第二个表示该SharedPreferences的访问模式。

接下来向大家介绍两种SharedPreferences的使用:

一、访问本应用的SharedPreferences实现

新建MainActivity和SecondActivity,一个用于sharedpreferences数据的存储,另一个用于数据的读取。

MainActivity代码:

public class MainActivity extends AppCompatActivity {

    private SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        preferences = getSharedPreferences("preferences", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("name","个人设置");
        editor.putString("volume","最大音量");
        editor.commit();
    }
}

SecondActivity代码:

public class SecondActivity extends AppCompatActivity {
    private SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        preferences = getSharedPreferences("preferences", Context.MODE_PRIVATE);
        String strName = "";
        String strVolume = "";
        strName = preferences.getString("name","administrator");
        strVolume = preferences.getString("volume","默认音量");
        Toast.makeText(SecondActivity.this, ""+strName+":"+strVolume, Toast.LENGTH_SHORT).show();
    }
}

运行上述demo,我们发现,虽然设置的访问模式为MODE_PRIVATE,但是不同的Activity还是可以访问的(不同的Activity只要在同一App下,不管两个App是否在同一包下,不同包的情况亲测过可以访问PRIVATE的模式)。因此,我们可以得出,SharedPreferences的数据是一个在App层面上的,它能够被本App的其他组件访问。


二、访问另一个应用的SharedPreferences

再新建一个不同的demo为OtherApp,其MainActivity具体代码如下:

public class MainActivity extends AppCompatActivity {

    private Context context;
    private SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
        /**
         *com.zhouyou.activitylifecycle是上面“一”部分Activity
         *的包名,此时“一”部分的访问模式应改为MODE_WORLD_READABLE
         */
            context = createPackageContext("com.zhouyou.activitylifecycle", Context.CONTEXT_IGNORE_SECURITY);
            preferences = context.getSharedPreferences("preferences", Context.MODE_WORLD_READABLE);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String name = preferences.getString("name", "");
        String volume = preferences.getString("volume", "");
        Toast.makeText(MainActivity.this, ""+name + "," + volume, Toast.LENGTH_SHORT).show();
    }
}

运行后发现访问是成功的。即,访问其他应用的SharedPreferences需要获取其对应包的Context,再通过这个context去访问他的SharedPreferences。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值