当前位置: 首页 > news >正文

商城网站建设计划书哈尔滨最新疫情通报

商城网站建设计划书,哈尔滨最新疫情通报,政府网站建设调查,网站模板模仿内容提供者的简单使用 最近在复习ContentProvider时遇到了一些问题,几经波折,终于解决了,故写下这篇博客,希望能帮到有相同问题的兄弟。 何时使用 当我们想要一个应用的数据向外部公开时,ContentProvider是一个不错…

内容提供者的简单使用

最近在复习ContentProvider时遇到了一些问题,几经波折,终于解决了,故写下这篇博客,希望能帮到有相同问题的兄弟。

何时使用

当我们想要一个应用的数据向外部公开时,ContentProvider是一个不错的选择

怎么使用

我把两个应用分别叫做client和service,client是我的需要请求其他数据的应用,service是提供数据的应用

先生成service

需要生成ContentProvider的子类

public class MyProvider extends ContentProvider {public MyProvider() {}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// Implement this to handle requests to delete one or more rows.throw new UnsupportedOperationException("Not yet implemented");}@Overridepublic String getType(Uri uri) {// TODO: Implement this to handle requests for the MIME type of the data// at the given URI.throw new UnsupportedOperationException("Not yet implemented");}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO: Implement this to handle requests to insert a new row.throw new UnsupportedOperationException("Not yet implemented");}@Overridepublic boolean onCreate() {// TODO: Implement this to initialize your content provider on startup.return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO: Implement this to handle query requests from clients.return getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO: Implement this to handle requests to update one or more rows.throw new UnsupportedOperationException("Not yet implemented");}
}

里面都是一些默认方法,只是重写了query这个查询方法。内容提供器属于四大组件之一,使用时要先声明

<application><providerandroid:name=".MyProvider"android:authorities="com.example.myprivider.provider"android:enabled="true"android:exported="true" />
</application>

这里的重点是authorities属性,他表明外部应该通过com.example.myprivider.provider来访问我们的ContentProvider,格式默认是包名.provider,同时也要enabled启动ContentProvider和exported允许外部访问

由于query方法访问我们的手机通讯录,我们在使用时先添加权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /></manifest>

代码请求权限

requestPermission(this, Manifest.permission.READ_CONTACTS);public static void requestPermission(Activity activity, String permission) {if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(activity, new String[]{permission}, 1);}
}

这样我们的service应用就写好了。

写出client应用来访问数据

这个代码比较简单

Uri uri = Uri.parse("content://com.example.myprivider.provider");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {StringBuilder sb = new StringBuilder();do {@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));@SuppressLint("Range") String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));sb.append(name).append(", ").append(number).append("\n");} while (cursor.moveToNext());binding.textView.setText(sb);
}

观察一下,uri比较重要,他是我们访问ContentProvider的重要角色,一般格式是content://访问的包名.provider/表名/序号。访问的包名.provider并不是绝对的,和我们的authorities属性(已加粗,往上找)有关,建议直接复制。其中表名和序号可有可无,具体看service中ContentProvider的实现,一般用来做一下标记,方便知道查询的是哪张表。
我们写完之后,还是不能直接访问,高版本的sdk要求我们必须提前声明要查询哪一个ContentProvider

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><queries><package android:name="com.example.myprivider" /></queries>
</manifest >

这里的包名就是我们service的包名了

做完之后,先启动我们的service,申请访问权限,在启动client,就可以通过ContentProvider间接访问到通讯录了。

使用总结

1.ContentProvider一般配合SQLiteOpenHelper组合使用,db的query方法也是生成Cursor类,可以直接被ContentProvider返回
2.service应用一定要先启动
3.剩下的看评论区问题,再补充

http://www.mnyf.cn/news/46839.html

相关文章:

  • 利用网站做淘宝客网站注册流程
  • 如何做webgis网站曹操博客seo
  • html企业网站主页模板靠谱的代运营公司有哪些
  • 做网站的图片传进去很模糊抖音seo培训
  • 行业公司网站建设全网营销推广软件
  • 宝安公司可以网站设计外贸网站优化推广
  • 自己做网站还是挂靠好重庆疫情最新数据
  • wordpress站群源码武汉seo网络优化公司
  • 做网站运营有前途么怎样注册一个自己的平台
  • 网站内容建设流程昆山优化外包
  • 做公众号网站有哪些网站查询
  • 网站制作学什么软件有哪些高端网站设计公司
  • 中国建设监理协会网站seo还能赚钱吗
  • 网页如何设计qq群排名优化软件购买
  • 网站开发内部工单苏州优化收费
  • 怎么制作外贸网站seo页面链接优化
  • 怎么做可以支付的网站seo网站推广目的
  • 网站怎么做防盗企业网站推广策划
  • 做网站导航用什么开元程序软件推广怎么赚钱
  • 企业网站的制作原则石家庄疫情最新情况
  • 做网站不用数据库可以吗网络广告联盟
  • 做网站推广怎么找客户晨阳seo
  • 做网站开发 甲方提供资料搜索引擎分析论文
  • 列举常用动态网站开发技术郑州seo优化
  • 怎样做农产品交易平台网站有必要买优化大师会员吗
  • 本地的佛山网站建设seo兼职工资一般多少
  • 商业类网站的设计与制作seo搜索引擎优化价格
  • 凡科建站是不是关闭企业网站今天上海重大新闻事件
  • 长春网站优化体验关键词优化方法有什么步骤
  • 国内常用erp系统有哪几种seo网站诊断价格