ContentProvider内容提供者和ContentResolver内容访问者

Android——ContentProvider详解 1. 简介 ContentProvider,内容提供者属于Android的四大组件之一 用于进程间 进行数据交互 & 共享,即跨进程通信 原理:使用binder机制(后续再进行介绍 统一资源标识符(URI): MIME数据类型: 全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务,是一种多用途网际邮件扩充协议 作用:指定某个扩展名的文件用某种应用程序来打开 如指定 .html 文件采用 text 应用程序打开、指定 .pdf 阅读详情

Android中内容观察者使用----ContentOtObserver内容监听者http://blog.youkuaiyun.com/qinjuning

1.什么是ContentProvider首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少。ContentProvider为不同的软件之间数据共享,提供统一的接口。也就是说,如果我们想让其他的应用使用我们自己程序内的数据,就可以使用ContentProvider定义一个对外开放的接口,从而使得其他的应用可以使用咱们应用的文件、数据库内存储的信息。当然,自己开发的应用需要给其他应用共享信息的需求可能比较少见,但是在Android系统中,很多系统自带应用,比如联系人信息,图片库,音频库等应用,为了对其他应用暴露数据,所以就使用了ContentProvider机制。所以,我们还是要学习ContentProvider的基本使用,在遇到获取联系人信息,图片库,音频库等需求的时候,才能更好的实现功能

2.如何定义一个ContentProvide
getType 返回内容提供者的MIME Type
Android系统为了让我们更好的对外暴露数据,提供了统一的接口,所以定义了抽象类ContentProvider,因此,如果我们想对外提供数据,我们需要继承ContentProvider,并且实现下面的这几个方法:
onCreate() 当我们的provider初始化时被调用,我们应该在这个方法里面完成部分初始化操作
query() 查询方法,用于给调用者返回数据
insert() 插入操作,用于让外部应用插入数据到内容提供者
update() 更新操作,用于更新内容提供者的数据
delete() 用于删除数据

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.zking.administrator.g160628_android16_sqlite.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名:"
        android:id="@+id/et_main_uname"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码:"
        android:id="@+id/et_main_upass"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="operation"
        android:text="操作"
        />
</LinearLayout>
MainActivity.java
package com.zking.administrator.g160628_android16_sqlite;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends AppCompatActivity {

    private EditText et_main_uname;
    private EditText et_main_upass;
    private SQLiteDatabase sqLiteDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_main_uname = (EditText) findViewById(R.id.et_main_uname);
        et_main_upass = (EditText) findViewById(R.id.et_main_upass);

        DbHelper dbHelper=new DbHelper(this,"G160628.db",null,2);
        sqLiteDatabase = dbHelper.getWritableDatabase();
    }

    public void operation(View view){
        String uname=et_main_uname.getText().toString();
        String upass=et_main_upass.getText().toString();
        //添加 1
//        ContentValues contentValues=new ContentValues();
//        contentValues.put("uname",uname);
//        contentValues.put("upass",upass);
//        contentValues.putNull("uid");
//        sqLiteDatabase.insert("login","uname",contentValues);
          //添加2
        for (int i = 0; i <100 ; i++) {
            sqLiteDatabase.execSQL("insert into login(uname,upass) values('小"+i+"','123')");
        }

        //修改
//        ContentValues contentValues=new ContentValues();
//        contentValues.put("uname",uname);
//        contentValues.put("upass",upass);
//        sqLiteDatabase.update("login",contentValues,"uid=?",new String[]{1+""});

        //删除
        //sqLiteDatabase.delete("login","uid=?",new String[]{102+""});

        //查询
//        sqLiteDatabase.query()
        int pageNo=2;
        int pageSize=3;
//        Cursor cursor=sqLiteDatabase.rawQuery("select * from login limit ?,?",new String[]{((pageNo-1)*pageSize)+"",pageSize+""});
//        while (cursor.moveToNext()){
//            int uid=cursor.getInt(cursor.getColumnIndex("uid"));
//            String name=cursor.getString(cursor.getColumnIndex("uname"));
//            String pass=cursor.getString(cursor.getColumnIndex("upass"));
//            Log.i("test",uid+" "+name+" "+pass);
//        }


        Toast.makeText(this, "操作OK", Toast.LENGTH_SHORT).show();
    }
}
MyProvider.java
package com.zking.provider;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;

import com.zking.db.DbHelper;

/**
 * Created by Administrator on 2017/7/17.
 */

public class MyProvider extends ContentProvider{
    @Override
    public boolean onCreate() {
        Log.i("test","onCreate");
        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        Log.i("test","query");
        DbHelper dbHelper=new DbHelper(getContext(),"G160628.db",null,2);
        SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
        return sqLiteDatabase.rawQuery("select * from login",null);
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
       Log.i("test","getType");
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
       Log.i("test","insert");
        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
       Log.i("test","delete");
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
       Log.i("test","update");
        return 0;
    }
}
AndroidManifest.xml配置页面
<!--android:authorities取值相对应三要素的网址,但是在这不能写网址,这里是包名点你的网页名字-->
        <!--android:name="."这里面的点指的是当前包名的意思-->
        <provider
            android:authorities="com.zking.administrator.g160628_android16_sqlite.ZHONGZI"
            android:name="com.zking.provider.MyProvider"
            android:exported="true"></provider>
        <!--android:exported="true"可访问-->

1. ContentResolver内容访问者就是通过Uri来访问ContentProvder中提供的数据。调用 ContentResolver对象的方法就能访问内容提供者。

2.操作Uri的工具类UriMatcher
UriMatcher 类主要用于匹配Uri.
有三个参数:
authority:匹配的授权者。
path:路径
code:返回代码

package com.zking.administrator.g160628_android25_contentresolver;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取内容访问者
        ContentResolver cr=getContentResolver();
        //必须得加协议content://
        Uri uri=Uri.parse("content://com.zking.administrator.g160628_android16_sqlite.ZHONGZI");
        Cursor cursor=cr.query(uri,null,null,null,null);
        while (cursor.moveToNext()){
            //拿值
            String uname=cursor.getString(cursor.getColumnIndex("uname"));
            Log.i("test",uname);
        }

    }
}


Android小课程8——ContentProvider内容提供者,ContentResolver内容解析者 ContentProvider内容提供者,ContentResolver内容解析者 阅读详情

相关推荐

25.ContentProvider自定义内容提供者与ContentResolver内容访问者

一.知识概括 二.案例 两个demo 一个专门用来提供数据    ContentProvider内容提供者(存在:数据库) 另一个demo专门用来访问数据   ContentResolver内容访问者 把Android25_ContentProvider里面的数据提供出去 具体代码实现如下 android25_contentprovider项目 activi

_北冥有鱼_的博客 591

跨进程共享数据——ContentProvider

跨进程共享数据——ContentProvider Android数据持久化技术,包括文件存储、SharedPreferences存储以及数据库存储,使用这些持久化技术所保存的数据只能在当前应用程序中访问。虽然文件存储和SharedPreferences存储中提供了MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种操作模式,用于供给其他应用程序访问当前应用的数据,但 这两种模式在Android 4.2版本中都已被废弃了。因为Android官方已经不再推荐使用这种方式来实现跨

xingyu19911016的博客 6203

SAP SD跨公司销售IDOC自动记账配置实战指南

本文详细介绍了SAP SD模块中跨公司销售IDOC自动记账的配置实战指南。通过IDOC技术实现集团企业间交易的自动化处理,显著提升财务效率和准确性。文章涵盖前置配置、RFC连接、合作伙伴参数设置及财务科目分配等关键步骤,并提供了常见错误排查和性能优化建议,帮助用户快速掌握这一高效业务流程。

weixin_29284885的博客 769

安卓四大组件之ContentProvider

安卓四大组件之ContentProvider

似霰的博客 5935

使用STM32实现简单的语音识别

此外,还需要将计算机的音频输出连接到外部音频放大器上,以便将测试语音播放到MAX9814麦克风模块。运行STM32代码后,系统将开始采集语音数据,并在采集完成后调用Python脚本进行MFCC特征提取。在本案例中,我们将使用STM32F4开发板、MAX9814麦克风模块和MFCC特征提取算法来实现语音识别。通过这个案例,我们可以了解到如何结合STM32开发板和Python实现语音识别,并可以根据需要进行相关扩展和优化。现在,我们可以编译和烧录STM32代码到开发板中,并准备好测试语音文件。

吃不胖. 1473

在WSL2中配置代理(Windows)

通过按照上述步骤在WSL2中配置代理,我们可以轻松地在Windows子系统Linux中使用代理服务器访问互联网。请确保提供正确的代理服务器地址和端口号,并根据实际情况进行修改。在WSL2中使用代理是一个常见的需求,它允许我们在Windows子系统Linux中通过代理服务器访问互联网。本文将详细介绍如何在WSL2中配置代理,并提供相应的源代码示例。如果返回的IP地址与代理服务器所在地不同,说明代理正常工作。希望本文能对你有所帮助!如有其他问题,请随时向我提问。替换为实际的代理服务器地址和端口号。

FcUnity的博客 4355

Android四大组件——ContentProvider开发

1.适用场景 1) ContentProvider为存储和读取数据提供了统一的接口 2) 使用ContentProvider,应用程序可以实现数据共享 3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等) 2.相关概念介绍 1)ContentProvider简介 当应用继承ContentProvide...

小旭的专栏 2475

把 SAP ABAP ALE 与 IDoc 玩明白:从架构、配置到排错的一套闭环方法

本文介绍了SAP集成中ALE与IDoc的核心概念与实战应用。ALE作为SAP分布式应用框架,通过异步消息机制实现系统间数据交换,其三层架构隔离业务与传输细节。IDoc作为标准化消息容器,包含控制、数据和状态记录。文章详细解析了配置要点(端口、伙伴参数)、处理流程(Process Code)、排错工具(BD87、WE09)及同系统测试方法,并提供了发送程序代码骨架。通过架构认知→配置→开发→运维的完整路径,帮助读者掌握ALE/IDoc的实际操作技能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

【Android】四大组件之ContentProvider

ContentProvider就是用来共享和管理数据的组件。

贫道绝缘子的博客 3438

DSP开发环境及工具之CCS

CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。编辑完C语言设置,添加cmd文件之后,然后检查编译配置选项。主要的操作都是在这个窗口之间做相应的切换。

小柚子的博客 4311

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7209

ContentProvider内容提供者 和 ContentResolver内容访问者

简介ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。 ContentProvider对外共享数据:步骤1. 定义一个类 继承 ContentProvider2. 定义匹配规则 指定主机名 + path code ur

qq_33201020的博客 372

修改yolov8使支持单通道图像输入

默认支持BGR三通道图像输入,但是在很多工业场景下,存在很多灰度图像的场景,因此对yolov8代码做一些修改以支持单通道图像输入,满足项目实际需求。训练时,只需要在 data 的 yaml 文件中,添加 ch=1 即可。

mingo_敏 5779

Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)

ContentProvider(内容提供者)是Android四大基本组件之一。用来共享应用程序内的数据;当你需要把你应用程序的数据提供给其他应用程序时需要用到它;内容访问者(ContentResolver)通过应用程序来访问内容提供者(ContentProvider)的方法,一旦通过ContentProvider提供自己的数据,不管应用程序是否启动,都可以访问得到。 (1)、ContentPro

AbbyDream的博客 1275

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android 中ContentProvider内容提供者和ContentResolver内容访问者

今天利用空闲时间研究了下ContentProvider,当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。   @Override public boolean onCreate() { DbHelper dbHelper=new DbHelper(getContext(),"person.db",null,2);

Eiverl的博客 449

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ContentProvider内容提供者与ContentResolver内容访问者

刚好接触到ContentProvider内容提供者与ContentResolver内容访问者,对它进行了一个初步的了解,它主要用于不同的应用程序之间实现数据的共享,允许一个程序访问另一个程序,还可以保证数据的安全。以下是我写的一个简单的ContentProvider与ContentResolver的一个列子(没有用系统内容提供者): 首先创建两个项目分别为android16_sqlite和andr

snail_Long的博客 430

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓开发四大组件——contentProvider基本使用介绍(1)

问题背景 我们在安卓日常开发和学习过程中,contentProvider是个很常见的概念,毕竟是四大组件之一。不过可能工作和学习过程中涉及到contentProvider的场景有时候不是很多。本文先初步介绍下contentProvider的基本使用。 问题分析 话不多说,直接上代码,代码主要可以分为两大部分,一个是内容提供...

baorant24的博客 872

contentprovider管理联系人信息

1.什么是ContentProvider数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。 不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问, 这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据, 则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接来使用...

互联网 262

给大家简述下ContentProvider(内容提供者)与ContentResolver(内容访问者)如何使用。

就给大家简单的讲解下本人对  ContentProvider内容提供者 与ContentResolver内容访问者的基础了解吧。                      首先在SQLite3工具中,有可以添加或者查询的基础上,也就是把这个项目当做ContentProvider(内容提供者来使用) 也就是为了给ContentResolver(内容访问者)访问做相应的铺垫吧 步骤1:现在S

chenzezhen6的博客 1115

Android基础——ContentProvider和contentResolver

ContentProviderContentProvider是什么?权限运行时权限 ContentProvider是什么? 利用ContentProvider可实现在不同应用程序之间的数据共享,并保证被访问数据的安全性。 权限 普通权限:不会直接威胁到用户安全和隐私的权限,这部分权限会自动授权,不再需要手动操作 危险权限:可能会触及用户隐私或对设备安全性造成影响的权限,必须要由用户手动授权,否则无法使用。危险权限需要进行运行时权限处理 运行时权限 ...

松仔Log的博客 1万+

内容提供者ContentProvider与内容接受者ContentResolver的使用详解

ContentProvider的使用 概念:contentprovider是内容提供者,很明显,内容提供者就是提供数据的,它是用来将自己的数据暴漏出来,供其他的程序访问并且进行增删改查的,同样的他也是四大组件之一,他的创建也需要在清单文件中声明,这里就不详细的描述了,先简单的描述一下他的使用方法, 步骤:1,创建类,继承自contentprovider,         2,创

世界流浪者的博客 1376
上一篇: Android黑名单自动挂断电话
下一篇: 获取手机的联系人
XHui_Lin
博客等级 码龄10年 27粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值