【问题标题】:Error when executing ContentResolver insert执行 ContentResolver 插入时出错
【发布时间】:2016-11-08 06:13:27
【问题描述】:

执行将新数据插入内容提供程序时出错,请参见下面的代码,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 行。如您的堆栈跟踪中所述,错误在该行中。
  • 第 48 行是 getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,values),谢谢回复
  • 我 - 几乎 - 确定在 ContentProvider 类上调用了 lastIndexOf(),它使用 URI 参数找出与请求相关的数据/id/... ,但我无法解释,为什么它会为空?我的意思是URI 为空?传递的值是 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 这是 API 常量?!它怎么可能是空的?
  • 首先感谢您的回复,我想问题可能出在 MediaStore 的 uri 上。声音的。媒体。 EXTERNAL_CONTENT_URI,但该 uri 只是我发现要插入的一个。那么如果这种方式很麻烦,如何将标题、艺术家等音乐信息插入到内容提供者中呢?
  • 您找到解决此问题的方法了吗?

标签: android


【解决方案1】:

我在 android Q (API 29) 之前遇到了同样的错误

如果您将文件下载到 PRE Android Q (Api 29) 的媒体商店,请在您的内容值中包含...

    val directory = mContext.getExternalFilesDir(Environment.DIRECTORY_MUSIC)

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

Api 29 及更高版本省略了 DATA 值。

【讨论】:

猜你喜欢
  • 2020-01-20
  • 2015-07-18
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多