ContentProvider和持久化存储
标签搜索

ContentProvider和持久化存储

Pop.Kite
2021-08-01 / 0 评论 / 148 阅读 / 正在检测是否收录...

ContentProvider

ContentProvider虽说我们平时用的并不多,但是作为安卓四大组件之一,其地位不容忽视。ContentProvider的作用是为不同的应用之间数据共享提供统一的接口。安卓系统中应用内部的数据是对外隔离的,如果想让其他的应用能够访问本应用的数据,此时就需要用到ContentProvider了,比如访问通讯录。

  • 要使用ContentProvider,首先要知道其工作流程:
  • 使用ContentProvider在应用A内标识要对其他应用提供的内容
  • 在应用B内通过ContentResolver使用uri访问、操作目标ContentProvider提供的数据

ContentProvider

ContentProvider是一个抽象类,如果我们需要开发自己的内容提供者我们就需要继承这个类并复写其方法,需要实现的主要方法如下

  • public boolean onCreate(): 在创建ContentProvider时使用
  • public Cursor query(): 用于查询指定uri的数据返回一个Cursor
  • public Uri insert(): 用于向指定uri的ContentProvider中添加数据
  • public int delete(): 用于删除指定uri的数据
  • public int update(): 用户更新指定uri的数据
  • public String getType(): 用于返回指定的Uri中的数据MIME类型
    数据访问的方法insert,delete和update可能被多个线程同时调用,此时必须是线程安全的

ContentResolver

其他应用是无法直接访问指定的ContentPrivider的,需要通过ContentResolver类访问。

URI

URI(Universal Resource Identifier)全称是统一资源定位符。

URI的格式:

scheme:path

通过下面的一条URI示例来解释上述URI的各参数:

http://www.baidu.com:8080/wenku/jiatiao.html?id=123456&name=jack
  • scheme:根据格式我们很容易看出来scheme为http
  • host:www.baidu.com主机
  • port:就是主机名后面path前面的部分为8080端口
  • path:在port后面?的前面为wenku/jiatiao.html路径
  • query:?之后的都是query部分为 id=123456$name=jack

持久化存储

在Android开发中数据的持久化经常使用的有文件存储、网络存储、Sqlit数据库和SharedPreferences,这里我们主要介绍SharedPreferences和Sqlit数据库两种存储方式。

SharedPreferences

SharePreferences是一种轻量级的数据存储方式,它使用键值对的方式将数据保存在data/data//shared_prefs目录下的xml文件中。

  • SharePreferences保存的数值只能是float、int、long、boolean和String这几个类型。
  • SharePreferences目前只支持MODE_PRIVATE这种操作模式,表示只有当前的应用可以对这个SharePreferences文件进行读写操作。其他的几种模式已经被弃用就不做介绍了。

SharePreferences的简单使用

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializeView();
    //获取sharedPreferences对象用于读取数据
    SharedPreferences sharedPreferences = getSharedPreferences("sharePreferencesDemo", Context.MODE_PRIVATE);
    //获取编辑器用于写入数据
    SharedPreferences.Editor editor = sharedPreferences.edit();
    addButton.setOnClickListener(view -> {
        //写入int型数据
        editor.putInt("index",1);
        editor.putString("name","TSaiGee");
        //提交数据
        editor.commit();
        //确认存储
        editor.apply();
    });

    readButton.setOnClickListener(view -> {
      //根据key读取数据并写入到TextView上
        showDataTextView.setText(String.valueOf(sharedPreferences.getInt("index",0)));
        showDataTextView.append("\n");
        showDataTextView.append(sharedPreferences.getString("name",""));
        });
}

SharePreferences的监听

SharedPreferences可以通registerOnSharedPreferenceChangeListener方法进行key变化的监听,该方法的第二个参数会返回变化的key,下面的代码可以键为name的值发生改变的时候将其置于TextView上:

SharedPreferences sharedPreferences = getSharedPreferences("sharePreferencesDemo", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
addButton.setOnClickListener(view -> {
    editor.putString(NAME, "TSaiGee");
    editor.commit();
    editor.apply();
});
sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.e(TAG, "onSharedPreferenceChanged: " + key);
        showDataTextView.setText(sharedPreferences.getString(key, ""));
    }
});

Demo

SharedPreferences Demo

Sqlit数据库

Loading...

Demo

0

评论 (0)

取消