Articles of android contentprovider

ContentProvider没有SQL

我有两个数据需要从外部应用程序访问和存储。 根据文档ContentProviders是唯一可能的方式,但它也提到了外部存储。 ContentProvider实现了一个类似数据库的“接口”,使用数据库对于两个数据来说是非常不必要的。 我宁愿把它们保存到一个文件中,但是通过实现抽象方法来使用ContentProvider是有问题的,因为这些方法被构造为数据库查询。 我知道没有任何内容指定ContentProvider必须使用下面的数据库来存储数据,但是有没有其他方法来存储必须共享到文件系统的最小数量的数据?

发生数据库更改后更新用户界面的方法

我正在使用第一种方法开发基于Google IO演示架构的应用程序。 基本上我有一个Service ,由SQLite DB支持的ContentProvider ,我也使用Loader 。 当我的数据库发生更改时,我需要一种更新UI的方法。 例如,用户可能想要将物品添加到他的篮子中。 将物品ID插入购物篮表后,我想更新UI。 我应该用什么方法? 到目前为止,我在ContentObserver上看到的信息很less。 这是要走的路吗?

Android重复提供者权限

当我尝试安装我的android应用程序时,我有用户抱怨“重复提供程序权限”错误。 我最初认为这可能是一个旧版本干扰新版本,但他们从来没有安装应用程序。 任何build议可能是什么原因造成的?

阅读未经许可的联系人?

我想通过Contacts Picker来阅读联系人,如下所示: Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(contact, CONTACT_PICK_CODE); 如果我得到结果, intent.getData()包含查找联系人的uri ,但是我需要权限READ_CONTACTS来读取它。 我认为有可能没有这个权限就可以收到联系人,类似于CALL权限:如果我想直接拨打电话,我需要它,但没有它,我可以发送一个号码到电话应用程序,用户必须点击通话button。 有没有我不知道的READ_CONTACTSfunction相似?

通过使用Realm库获取光标

我正在使用游标适配器为我的列表视图。 我打算使用内容parsing器来获取游标。 现在我改变了主意,给了它一个学习领域的机会。 我怎样才能通过使用领域获得“光标”对象? 顺便说一句,我也将不胜感激给一些片段来sorting游标。 谢谢。 final class Contact extends RealmObject { private CharSequence mName; public CharSequence getName() { return mName; } public void setName(CharSequence name) { this.mName = name; } } final class ContactListAdapter extends CursorRecyclerViewAdapter<ContactListAdapter.ContactHolder> implements View.OnClickListener { private OnContactClickListener mListener; public ContactListAdapter(Context context, Cursor cursor) { super(context, cursor); } @Override public ContactHolder […]

在Android中testing自定义的ContentProvider

我已经写了我的内容提供者应该包装访问SqlLite数据库中的2个表。 现在我想写一些testing用例,但是我从来没有这样做过。 在阅读开发者指南的章节后,我必须说我没有设法做任何testing。 以下是我的代码到目前为止。 这是testing项目中唯一对应于我的主项目的类。 当我在Eclipse中执行它时,模拟器正确启动,软件包被安装,但是它不运行testing: testing运行失败:testing运行不完整。 预期1个testing,收到0 这里是testing类: public class ArticleProviderTest extends ProviderTestCase2<ArticleProvider> { static final Uri[] validUris = new Uri[] { Articles.CONTENT_URI, Pictures.CONTENT_URI, Pictures.getContentUriForArticleId(1) }; public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { super(providerClass, providerAuthority); } @Override protected void setUp() throws Exception { super.setUp(); } public void testQuery() { ContentProvider provider = getProvider(); for (Uri […]

Android内容提供者和多对多数据库关系

我有一个简单的Notes应用程序,其function与Android NotePad示例类似。 另外还有每个音符都可以有标签。 Note可以有几个Tag ,一个Tag可以属于几个Note – 从而使这是一个多对多的关系。 我已经使用外键和映射表完成了数据库devise。 现在,我希望我的应用程序能够插入Androidsearch框架,这需要使用ContentProvider来公开我的数据。 这种情况下是否有最佳做法? 我确实发现了一些关于这个问题的相关问题,但是其中大部分都涉及到一对多的关系(比如这个 )。 我从这些问题得出结论:最好每个数据库都有一个ContentProvider ,然后使用Matcher概念来parsing数据库中的多个表。 这仍然留下其他问题。 给定一个Note ID ,我想返回与该Note相关的所有标签。 如何为这种情况设置ContentUri ? "content://myexample/note/#"和"content://myexample/tag/#"都不能达到目的。 我重写的6个ContentProvider方法都不适合这样的目的,对吗? 我当然可以介绍一种新的方法,但ContentProvider不会理解这一点。 在此先感谢您的build议。

ContentProvider与多个表

我想实现一个处理多个表的ContentProvider 。 这是我到目前为止所尝试的。 我写了一个Java Interface ,它代表了每个表在其CRUD类中应该实现的CRUD操作。 public interface CRUDHandler { //UPDATE int update(Uri uri, ContentValues values, String selection,String[] selectionArgs); //READ Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) ; //CREATE Uri insert(Uri uri, ContentValues values); //DELETE int delete(Uri uri, String selection, String[] selectionArgs); //get Mime type String getType(Uri uri); } 然后,我写了一个abstract class ,为ContentProvider定义了一个静态UriMatcher […]

如何为Intent.ACTION_GET_CONTENT提供内容

web和stackoverflow包含几个例子如何从另一个Android应用程序(例如,使用它作为电子邮件附件)使用ACTION_GET_CONTENT意图获取文件。 但是,我必须实现哪种类来创build为ACTION_GET_CONTENT事件提供内容的应用程序,例如我可以select这个应用程序(例如,用于select电子邮件附件)。 ContentProvider是正确的解决scheme吗? 我有什么要添加到我的AndroidManifest.xml?

如何通过ContentResolver在ContentProvider中调用自定义方法,然后访问Bundle?

我有一个自定义方法save()在我想通过ContentResolver调用的自定义ContentProvider类MyContentProvider中。 目标是将一个POJO作为一个Bundle传递给MyContentProvider 。 我正在使用这里提到的和在 这里定义的call方法。 我没有得到任何错误。 该方法只是没有访问。 自定义方法的(缩写)自定义ContentProvider如下所示: public class MyContentProvider extends ContentProvider { public void save() { Log.d("Test method", "called"); } } 我这样称呼它: ContentResolver contentResolver = context.getContentResolver(); Bundle bundle = new Bundle(); bundle.putSerializable("pojo", getPojo()); contentResolver.call(Contracts.CONTENT_URI, "save", null, bundle); 为什么save方法从来没有被调用过,如果我到了这个地步,我怎样才能在save()方法中访问被调用的Uri和Bundle呢? 我无法在SO或网上的任何地方find任何参考。 谢谢您的回答!