为什么我不能将音频文件的持续时间格式化为 textView?

Why can't I format the duration of the audio file into a textView?

我正在尝试格式化歌曲的持续时间,因为我收到的是以毫秒为单位的,但我尝试的方法不起作用。

我试过用这种方式,注释行(//)是我收到时长,但以毫秒为单位。

此 song_duration 是来自模型 class 的字符串变量,song_time 是 xml 文件中 textView 的 ID。

String.toLong()中,我得到了图像上的错误

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder.song_title.text = songList[position].song_title
            holder.song_artist.text = songList[position].artist
        //    holder.song_time.text = songList[position].song_duration

            holder.song_time.text = songList[position].song_duration.format(
                    "%d:%02d",
                        TimeUnit.MILLISECONDS.toMinutes(String.toLong()),
                        TimeUnit.MILLISECONDS.toSeconds(String.toLong())-
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(String.toLong()))
            )
        
        var bitmap : Bitmap? = null
        try {
            bitmap =
                MediaStore.Images.Media.getBitmap(context.contentResolver, songList[position].image)
            holder.song_image.setImageBitmap(bitmap)
        }catch (e: Exception){

        }
        holder.itemView.setOnClickListener{
            currentSong = position
            onSongSelect.onSelect(songList[position])
        }
    } 

您将无效参数传递给 TimeUnit.MILLISECONDS.toMinutes。要从 Millis 获取格式化时间,您可以使用下面的代码

在您的 onBindViewHolder 中更改为

holder.song_time.text = songList[position].song_duration.format(
                    "%d:%02d",
                        TimeUnit.MILLISECONDS.toMinutes(String.toLong()),
                        TimeUnit.MILLISECONDS.toSeconds(String.toLong())-
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(String.toLong()))
            )

holder.song_time.text = getformattedTime(songList[position].song_duration.toLong())

然后为您添加格式化时间的功能

public String getformattedTime(long seconds) {
    long sec = seconds % 60;
    long min = (seconds / 60) % 60;
    long hr = (seconds / (60 * 60)) % 24;
    return String.format("%d:%02d:%02d", hr, min, sec);
}