Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用“IN”子句使用内容解析器进行动态查询_Java_Android_Kotlin - Fatal编程技术网

Java 使用“IN”子句使用内容解析器进行动态查询

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列表匹配的歌曲列表

我按照这个答案使用内容解析器动态查询项目

我正在尝试查询与传递的id列表匹配的歌曲列表

例如


从音乐数据库中选择,其中_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
                    }
                }
            }