执行ContentResolver插入操作时出现错误

3

在向内容提供程序插入新数据时出现错误,请参见下面的代码。PS。我只是将以下代码直接放入Activity的onCreate()中,然后执行。

ContentValues values=new ContentValues();
values.put(MediaStore.Audio.Media.TITLE,"Example Song");
values.put(MediaStore.Audio.Media.ARTIST,"Unknown");

getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,values);

只是简单地插入新的歌曲数据,但出现了以下错误。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference
at android.os.Parcel.readException(Parcel.java:1605)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
at android.content.ContentResolver.insert(ContentResolver.java:1254)
at com.example.flover.contentproviderdemo.MainActivity.onCreate(MainActivity.java:48)

有人能告诉我为什么吗?提前感谢。

请指定您的主活动中的第48行。错误在该行中,如堆栈跟踪中所述。 - Varun Kumar
第48行是getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,values),谢谢您的回复。 - Leon
我 -几乎- 确信lastIndexOf()是在ContentProvider类上调用的,并且它使用URI参数来查找与请求相关的数据/ID/...,但我无法解释为什么它会为空?我的意思是URI为空吗?传递的值是MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这是API常量?!它怎么可能为空? - Yazan
首先感谢您的回复,我猜问题可能出在uri上,即MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,但这个uri是我找到的唯一一个可插入的。那么如果这种方式有问题,如何将音乐信息(例如标题、艺术家)插入内容提供程序呢? - Leon
你找到这个问题的解决方案了吗? - Blo
@Fllo 这是我问题的解决方案,https://dev59.com/EVoV5IYBdhLWcg3wLsT5,在 Android 提供程序中添加新歌曲,您必须检索所有元数据并将所需信息添加到提供程序数据库中,否则歌曲将不会显示。 - Leon
1个回答

6

在 Android Q(API 29)之前,我一直遇到同样的错误。

如果你要将文件下载到媒体库中,在 Android Q(API 29)之前,请在内容值中包含以下内容...

    val directory = mContext.getExternalFilesDir(Environment.DIRECTORY_MUSIC)

    contentValues.put(MediaStore.Audio.AudioColumns.DATA, "${directory}${song?.title}")

API 29及以上版本省略了DATA值。


这对我有用,非常感谢。为了我的理解,这个在哪里有记录? - bogdan
它是有效的,但这种方法在“添加项目”(https://developer.android.com/training/data-storage/shared/media#add-item)中没有提到。 - Mohd Qasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接