Java 使用“IN”子句使用内容解析器进行动态查询
我正在尝试使用内容解析器获取与媒体Id列表匹配的歌曲列表 我按照这个答案使用内容解析器动态查询项目 我正在尝试查询与传递的id列表匹配的歌曲列表 例如Java 使用“IN”子句使用内容解析器进行动态查询,java,android,kotlin,Java,Android,Kotlin,我正在尝试使用内容解析器获取与媒体Id列表匹配的歌曲列表 我按照这个答案使用内容解析器动态查询项目 我正在尝试查询与传递的id列表匹配的歌曲列表 例如 从音乐数据库中选择,其中_ID={12,13,14,15,16}-如果您有固定列表的话。那么您的选择是什么样子的呢?像MediaStore.Audio.Media.\u ID+=${ID}这样的选择没有帮助。我看不到清单。告诉我像{12,13,14,15,16}这样的固定列表会变成什么样子。发布字符串值。没有代码。问题是在queryCa be中使
从音乐数据库中选择,其中_ID={12,13,14,15,16}-如果您有固定列表的话。那么您的选择是什么样子的呢?像MediaStore.Audio.Media.\u ID+=${ID}这样的选择没有帮助。我看不到清单。告诉我像{12,13,14,15,16}这样的固定列表会变成什么样子。发布字符串值。没有代码。问题是在queryCa be中使用什么作为selectionArgs。但是,当您要求动态数组时,您建议您知道如何处理静态数组。所以请告诉我。
fun getSongsInPlaylist(songIds: List<Long>): List<Songs> {
val selection = MediaStore.Audio.Media._ID + " IN (" + TextUtils.join(
",", Collections.nCopies(songIds.size, "?"))+")"
val songList = mutableListOf<Songs>()
val collection = Utility.sdk29AndUp {
MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
} ?: MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
for (i in songIds.indices) selectionArgs!![i] = songIds[i]
//Get songs from provider
context.contentResolver.query(
collection,
projection,
selection,
arrayOf(selectionArgs.toString()),
MediaStore.Audio.Media.DEFAULT_SORT_ORDER //Sort in alphabetical order based on display name.
).use { cursor ->
if (cursor?.moveToFirst() == true) {
do {
}
fun doGetAllSongsInPlaylist(songIds: List<Long>){
val permissionGranted = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
if (permissionGranted){
viewModelScope.launch {
val songs = songsInPlaylistDatabase.getSongsInPlaylist(songIds)
_songsInPlaylist.value = Resource.success(songs)
}
}
}
args.playlist.playlistId?.let { roomPlaylistViewModel.doGetAllSongsInPlaylist(it) }
roomPlaylistViewModel.songsInPlaylist.observe(viewLifecycleOwner){ songs->
for (songId in songs){
songId.songId.let { it1 ->
if (it1 != null) {
songIdArray.add(it1)....//I am getting songId's and saving in an array
}
}
}
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED){
playlistViewModel.doGetAllSongsInPlaylist(songIdArray)...//I am passing the song Id's stored in array here
playlistViewModel.songsInPlaylist.collect{ result ->
when(result.status) {
Status.SUCCESS -> {
result.data?.let { songs ->
Log.e("lisx", songs.toString())
}
}
Status.ERROR -> Unit
Status.LOADING -> Unit
}
}
}