标签: android-contentprovider

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)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at android.content.ContentProvider$Transport.query(ContentProvider.java:163)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at android.content.ContentResolver.query(ContentResolver.java:245)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at net.lp.collectionista.providers.FacadeContentProvider.query(FacadeContentProvider.java:563)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at android.content.ContentProvider$Transport.query(ContentProvider.java:163)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at android.content.ContentResolver.query(ContentResolver.java:245)
12-31 20:55:45.861: ERROR/AndroidRuntime(12478):     at net.lp.collectionista.util.ScanAddTask.existsProduct(ScanAddTask.java:164) …
Run Code Online (Sandbox Code Playgroud)

database sqlite android android-contentprovider

65
推荐指数
1
解决办法
5万
查看次数

使用ContentProviderClient和ContentResolver访问内容提供程序

Android内容提供商文档描述了使用ContentResolver,从中获取getContentResolver(),访问内容.

然而,还有一个ContentProviderClient,可以从中获得getContentResolver().acquireContentProviderClient(authority).它似乎提供了或多或少相同的方法,ContentResolver用于从提供者访问内容.

我什么时候应该使用ContentProviderClient而不是ContentResolver直接使用?有什么好处?

android android-contentresolver android-contentprovider

63
推荐指数
3
解决办法
2万
查看次数

从Picasa // Google +同步文件夹中获取图库中的图像不起作用

我正在尝试从Google+同步照片中的某个文件夹中获取图库应用中的图片.选择图像后,Uri正在正确传回.但是当我试图在存储设备上获取该图像的实际路径时,我可以使用它,它会崩溃.问题似乎与picasa内容提供商有关.

在Nexus S和Nexus 7以及其他设备上进行了测试.

E/AndroidRuntime(14572): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5427003652908228690 }}

这里,dat字段似乎正确地传递了Uri,但是当我尝试获取图像的位置时,它崩溃时出现以下错误.

W/GalleryProvider(14381): unsupported column: _data

似乎Picasa相册的内容提供商没有_data字段.

获取位置的代码是:

// imageUri is the Uri from above.
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(imageUri, proj,null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();

String filePath = cursor.getString(column_index);
cursor.close();

此图片似乎唯一支持的列包括:[user_account,picasa_id,_display_name,_size,mime_type,datetaken,纬度,经度,方向]

我们如何获得此图像的实际位置.如果我们不应该使用此图像,则不应首先向用户显示这些图像.

启动图库应用程序的意图是:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

android android-intent android-contentprovider

58
推荐指数
3
解决办法
2万
查看次数

android - 没有Content Provider的CursorLoader和SQLite

我知道这已经讨论过但我想问一下目前的情况.我是否必须创建一个ContentProvider以将CursorLoader与sqlite数据库结合使用?

我发现

没有ContentProvider的CursorLoader用法

正如Emmby评论的那样,看起来正是我所希望的

  • 用户应该意识到一个限制,即它没有机制来刷新数据更改(因为Loaders应该这样做)

因此提到了另一种解决方案

https://github.com/commonsguy/cwac-loaderex

还指出了一些缺点

  • 但是,要使用自动重新查询,您需要为UI和更新使用相同的加载程序,从而限制其对后台服务的可用性.

当然,在使用LoaderManager时,我们希望获得它所引入的所有好处.所以我的问题是,如果有一种方法可以使用LoaderManager连接sqlite数据库,而无需实现内容提供程序,但具有它的所有好处.

谢谢

sqlite android android-contentprovider android-loadermanager

54
推荐指数
1
解决办法
2万
查看次数

如何使用Android SyncAdapter?

我尝试了解Android同步逻辑.我不明白的是syncadapter.xmlAndroid SDK示例项目中包含的文件SampleSyncAdapter.如果您下载了SDK示例,则它应位于以下文件夹中:

SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml
Run Code Online (Sandbox Code Playgroud)

我读过,内容提供者的权限应该是字符串或对资源的引用.内容权限到底是什么com.android.contacts?以下是文件的内容(没有许可证信息和注释,API级别16).

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.example.android.samplesync"
    android:supportsUploading="false"
    android:userVisible="true"
/>
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-syncadapter

51
推荐指数
2
解决办法
5万
查看次数

房间持久性库和内容提供商

最近几天我一直在花时间学习新的Android架构组件.在跟进了一些博客文章,文档和教程后,每个组件都清楚了.但突然间,我意识到我们的老朋友内容提供商.我可能听起来很傻,因为在写这个问题之前我花了很长时间搜索,我是唯一一个提出这个问题的人.我没有任何有用的解决方案.无论如何,如果我想用本地数据库构建一个应用程序,我现在显然会选择新的架构组件(实时数据,视图模型,房间),而不需要进一步思考这对于使应用程序10x强大有用非常有帮助.但是如果我希望我的数据库数据可以访问其他应用程序,例如To Widget如何将Content Provider与Room集成?

architecture android android-contentprovider android-room

51
推荐指数
4
解决办法
1万
查看次数

数据更改后CursorLoader没有更新

我创建了一个小应用程序,试图理解LoaderManagerCursorLoader-classes 的功能.

我已经实现了LoaderCallbacks<Cursor>我的FragmentActivity-class,一切工作正常,但事实上,当我通过我的更新数据ContentResolver.update()ContentResolver.insert()-方法,onLoadFinished()不叫,结果我的数据不会更新.

我有一个自定义ContentProvider,我想知道问题是在我的ContentProvider中没有通知数据已更改或其他内容.

android android-contentprovider android-loadermanager android-cursorloader

49
推荐指数
2
解决办法
2万
查看次数

私人内容提供商有什么用?

Android Dev Guide

内容提供程序对于读取和写入应用程序专用但不共享的数据也很有用.

通常,内容提供商用于向不同的应用程序提供数据或在它们之间共享数据.我想知道私人提供商是否有任何用处并且不想分享它.如果没有提供直接访问数据库或文件系统的权限,是否有任何好处?

谢谢,拉贾斯

android data-storage android-contentprovider

43
推荐指数
1
解决办法
6450
查看次数

从内部存储创建和共享文件

我的目标是在内部存储上创建XML文件,然后通过共享Intent发送它.

我可以使用此代码创建XML文件

FileOutputStream outputStream = context.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
PrintStream printStream = new PrintStream(outputStream);
String xml = this.writeXml(); // get XML here
printStream.println(xml);
printStream.close();
Run Code Online (Sandbox Code Playgroud)

我试图将Uri检索到输出文件以便共享它.我首先尝试通过将文件转换为Uri来访问该文件

File outFile = context.getFileStreamPath(fileName);
return Uri.fromFile(outFile);
Run Code Online (Sandbox Code Playgroud)

这将返回file:///data/data/com.my.package/files/myfile.xml但我似乎无法将其附加到电子邮件,上传等.

如果我手动检查文件长度,它是正确的,并显示有一个合理的文件大小.

接下来,我创建了一个内容提供程序并尝试引用该文件,它不是该文件的有效句柄.在ContentProvider没有以往任何时候都似乎被称为任意点.

Uri uri = Uri.parse("content://" + CachedFileProvider.AUTHORITY + "/" + fileName);
return uri;
Run Code Online (Sandbox Code Playgroud)

这将返回内容://com.my.package.provider/myfile.xml但我检查文件并且它的长度为零.

如何正确访问文件?我是否需要使用内容提供商创建文件?如果是这样,怎么样?

更新

这是我用来分享的代码.如果我选择Gmail,它会显示为附件,但是当我发送它时会出现错误无法显示附件,并且到达的电子邮件没有附件.

public void onClick(View view) {
    Log.d(TAG, "onClick " + view.getId());

    switch (view.getId()) {
        case R.id.share_cancel:
            setResult(RESULT_CANCELED, getIntent());
            finish();
            break;

        case R.id.share_share:

            MyXml …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-file

41
推荐指数
3
解决办法
4万
查看次数

android中的contentprovider和contentResolver有什么区别

ContentProvidersContentResolver有什么区别?我不想要SQLite数据库.我正在开发一个媒体应用程序.

android android-contentresolver android-contentprovider

40
推荐指数
4
解决办法
3万
查看次数