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

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 261

安卓四大组件之ContentProvider

安卓四大组件之ContentProvider

似霰的博客 5935

使用DDR4控制器实现多通道数据读写

这种高带宽对于大量的数据的应用非常重要。对于Controller/PHY Mode 的选择,我们使用Controller + PHY模式,Xilinx UltraScale/UltraScale+等高端FPGA通常包含硬核PHY,选择Controller + PHY模式可直接利用硬核,降低功耗和延迟,并且此模式的开发更易上手。在Basic页面下,首先勾选上AXI4 Interface选项,我们选用的内存接口速度为2133MHz的ddr4芯片,由于双沿触发,频率为1066MHz,那么周期应为938ps。

weixin_38828382的博客 1363

批量读取_MCGS触摸屏如何实现批量读取modbus数据的方法?

前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。一、工具1.modsim:仿真PLC或者第三方设备。2.MCGS组态软件3.串口软件:在电脑中生成两不...

weixin_32511509的博客 8160

Android四大组件——ContentProvider开发

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

小旭的专栏 2475

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 582

【Android】四大组件之ContentProvider

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

贫道绝缘子的博客 3438

从信号到振镜:STM32F103 + XY2-100协议 + AM26LS31芯片的激光打标/雕刻系统信号链搭建指南

本文详细介绍了基于STM32F103微控制器和XY2-100协议的激光打标/雕刻系统信号链搭建方法。从数字振镜控制协议解析、AM26LS31差分驱动电路设计到信号完整性优化,提供了一套完整的解决方案,帮助工程师实现高精度激光控制系统的开发与调试。

weixin_42536058的博客 236

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

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

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

qq_33201020的博客 372

【感知模块算法】障碍物detect+trace+prediction方向介绍

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多维度看感知问题,体会复杂性二、障碍物/环境目标detect方向1.视觉目标检测方向(1)图像处理认知(2)视觉基础理论部分1、获取数据集---python网页爬虫、买数据、自己录数据、使用开源比赛的数据集2、opencv库的学习3、深度学习框架学习(3)视觉目标检测理论(1)目标检测的概念(2)目标检测的应用场景(3)现有目标检测框架原理及论文【这仅仅是我当初入门学习的框架~

qq_35635374的博客 2894

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

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

AbbyDream的博客 1275

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

Eiverl的博客 449

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

snail_Long的博客 430

安卓开发四大组件——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、付费专栏及课程。

余额充值