Questions tagged «android-contentprovider»

内容提供商是Android应用程序的主要构建模块之一,可为应用程序提供内容。

17
安装在控制台中显示错误:INSTALL FAILED CONFLICTING PROVIDER
我正在尝试使用Android SDK中的NotesList示例程序。我对该程序做了些许改动,但是当我安装编辑后的版本时,如果原始的Notes程序已经在设备上,则尝试在控制台中安装该消息时,我会不断收到消息INSTALL_FAILED_CONFLICTING_PROVIDER。我需要在提供程序中进行哪些更改以使其成为唯一数据库?如果我卸载原始的Notes程序,然后安装编辑后的版本,则效果很好。

9
如何使用支持FileProvider与其他应用程序共享内容?
我正在寻找一种使用Android支持库的FileProvider与外部应用程序正确共享(而不是打开)内部文件的方法。 按照文档上的示例, <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.android.supportv4.my_files" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/my_paths" /> </provider> 并使用ShareCompat将文件共享到其他应用程序,如下所示: ShareCompat.IntentBuilder.from(activity) .setStream(uri) // uri from FileProvider .setType("text/html") .getIntent() .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 不起作用,因为FLAG_GRANT_READ_URI_PERMISSION仅授予data对intent 上指定的Uri的许可,而不是EXTRA_STREAMextra 的值(由setStream)。 我试图通过将提供者设置android:exported为来损害安全性true,但是在FileProvider内部检查自身是否已导出,如果导出,则抛出异常。

14
在Gradle中使用构建类型运行在同一设备上使用ContentProvider的同一应用
我已经设置Gradle来将包名称后缀添加到我的调试应用程序中,这样我就可以拥有正在使用的发行版本和一部手机上的调试版本。我指的是这个:http : //tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Types 我的build.gradle文件如下所示: ... android { ... buildTypes { debug { packageNameSuffix ".debug" versionNameSuffix " debug" } } } 一切正常,直到我开始在应用程序中使用ContentProvider。我得到: Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] 我知道发生这种情况是因为两个应用程序(发行版和调试版)正在注册相同的ContentProvider权限。 我认为可以解决这个问题。如果我理解正确,则应该能够指定在构建时要使用的其他文件。然后,我应该能够将不同的权限放入不同的资源文件中(并从Manifest中将权限设置为字符串资源),并告诉Gradle使用不同的资源进行调试构建。那可能吗?如果是的话,那么关于如何实现这一点的任何提示都将很棒! 还是可以使用Gradle直接修改Manifest?始终欢迎任何其他有关如何在一个设备上与ContentProvider运行同一应用程序的解决方案。

2
为什么ContentResolver.requestSync不触发同步?
我正在尝试实现Google IO-幻灯片26中讨论的Content-Provider-Sync Adapter模式。我的内容提供程序正在运行,当我从Dev Tools Sync Tester应用程序触发它时,我的同步起作用了,但是当我调用ContentResolver时。来自ContentProvider的requestSync(帐户,权限,捆绑包),我的同步从未触发。 ContentResolver.requestSync( account, AUTHORITY, new Bundle()); 编辑-添加清单清单我的清单xml包含: <service android:name=".sync.SyncService" android:exported="true"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> </service> - 编辑 与我的同步服务关联的syncadapter.xml包含: <?xml version="1.0" encoding="utf-8"?> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:contentAuthority="AUTHORITY" android:accountType="myaccounttype" android:supportsUploading="true" /> 不知道其他什么代码会有用。传递给requestSync的帐户是“ myaccounttype”,并且传递给调用的AUTHORITY匹配我的syc适配器xml。 ContentResolver.requestSync是否是请求同步的正确方法?看起来好像同步测试器工具直接绑定到服务并调用开始同步,但这似乎违反了与同步体系结构集成的目的。 如果这是请求同步的正确方法,那么为什么同步测试器可以工作,而不是我对ContentResolver.requestSync的调用?我需要通过捆绑销售商品吗? 我正在运行2.1和2.2的设备上的模拟器中进行测试。

5
没有ContentProvider的CursorLoader用法
Android SDK文档说该startManagingCursor()方法已被弃用: 不建议使用此方法。而是将新的CursorLoader类与LoaderManager一起使用;在旧版平台上,也可以通过Android兼容性软件包获得此功能。此方法使活动可以根据活动的生命周期来为您管理给定的Cursor生命周期。也就是说,当活动停止时,它将自动在给定的Cursor上调用deactivate(),而在稍后重新启动时,它将为您调用requery()。活动销毁后,所有托管游标将自动关闭。如果您的目标是HONEYCOMB或更高版本,请考虑改用LoaderManager(可通过getLoaderManager()获得) 所以我想用CursorLoader。但是,当我在的构造函数中需要URI时,如何在有自定义CursorAdapter和不存在的情况下使用它?ContentProviderCursorLoader

9
何时使用内容提供商
我了解内容提供者旨在允许在应用程序之间公开共享数据。但是,我想知道是否有人考虑过让内容提供程序仅在您自己的应用程序中使用。这样做会有什么好处吗?有什么缺点吗? 过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但是我正在考虑创建一个Content Provider。我觉得请求数据的URI方法简明扼要。另一方面,仅将Content Provider用于我的应用程序是否会多余(因为在其中,我将拥有SQliteOpenHelper类)并且工作量超过所需?

5
在Android中使用内容提供商公开多个表格的最佳做法
我正在构建一个应用程序,其中有一个用于活动的表和用于场地的表。我希望能够授予其他应用程序对此数据的访问权限。我有一些与此类问题的最佳做法有关的问题。 我应该如何构造数据库类? 我目前有EventsDbAdapter和VenuesDbAdapter类,它们提供查询每个表的逻辑,同时具有一个单独的DbManager(扩展了SQLiteOpenHelper)来管理数据库版本,创建/升级数据库,提供对数据库的访问权限(getWriteable / ReadeableDatabase)。这是推荐的解决方案,还是将所有内容合并到一个类(即DbManager)或将所有内容分离并让每个适配器扩展SQLiteOpenHelper更好? 我应该如何设计多个表的内容提供程序? 扩展上一个问题,我应该为整个应用程序使用一个内容提供程序,还是为事件和地点创建单独的提供程序? 我发现的大多数示例仅涉及单表应用程序,因此,我希望在这里提出任何建议。

9
“内容提供者”与“ SQLite数据库”之间的确切区别
我已经为Android完成了SQLite数据库编程,但是除以下内容外,我对Content-Provider一无所知:“当我提到Android开发人员页面时,Android SDK解释了“ Content-provider”,因为它用于存储和检索数据。” 但是之后, “ Content-Provider”和“ SQLite Database”之间的确切区别是什么? 什么时候最好存储数据? 任何例子或帮助!

6
在ContentProvider中关闭数据库
本周,我已经学习了所有关于ContentProvider的知识,并使用SQLiteOpenHelper类管理提供程序内部数据库的创建和升级。具体来说,我已经从sdk的示例目录中阅读了NotePad示例。 现在,我可以看到SQLiteOpenHelper具有close()方法。我知道让空闲数据库处于打开状态是一种不好的做法,并且可能导致内存泄漏和其他问题(除非此讨论的方向正确)。如果我在Activity中使用该类,则只需在onDestroy()方法中调用close(),但据我所知,ContentProvider与活动没有相同的生命周期。NotePad的代码似乎从未调用过close(),因此我想假设它是由SQLiteOpenHelper或其他难题解决的,但是我真的很想知道。我也不是很信任示例代码。 问题摘要:我们应该什么时候关闭提供程序中的数据库?

3
IllegalArgumentException:索引1处的绑定值为null
有人知道这意味着什么吗? 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:234) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:182) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:280) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at net.lp.collectionista.providers.ProductContentProvider.query(ProductContentProvider.java:350) …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.