Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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
getDrawable Kotlin文件导致未找到资源,但可在Java文件中工作_Java_Android_Android Studio_Kotlin - Fatal编程技术网

getDrawable Kotlin文件导致未找到资源,但可在Java文件中工作

getDrawable Kotlin文件导致未找到资源,但可在Java文件中工作,java,android,android-studio,kotlin,Java,Android,Android Studio,Kotlin,由于无法通过drawable加载位图,我头痛了几个小时。要通过我正在使用的资源加载可提取文件 ContextCompat.getDrawable(this,R.drawable.ic_launcher_background); 如果我在任何.kt文件扩展名中使用它,它永远不会加载可绘制文件。我调试了它,发现它导致资源未找到异常。 为了验证这个假设。我创建了一个只有2个文件的新项目。一个Java和一个Kotlin。 它在java文件中工作。 我真的不明白为什么它在java中工作,并导致kotl

由于无法通过drawable加载位图,我头痛了几个小时。要通过我正在使用的资源加载可提取文件

 ContextCompat.getDrawable(this,R.drawable.ic_launcher_background);
如果我在任何.kt文件扩展名中使用它,它永远不会加载可绘制文件。我调试了它,发现它导致
资源未找到异常。
为了验证这个假设。我创建了一个只有2个文件的新项目。一个Java和一个Kotlin。 它在java文件中工作。 我真的不明白为什么它在java中工作,并导致kotlin出现异常


因此,我认为这是Android studio在调试时的一个bug,它不会泄露可绘制的内容


虽然我的问题是我正在从vector drawable创建位图,但不知怎么的,它并没有在画布上绘制,所以我开始调试它,并遇到了找不到的资源。我尝试了png,它成功了。尽管它在kotlin和java中都能工作,即创建了可绘制对象,但调试器存在一些问题,如问题中所述

你的构建工具版本是什么?com.android.tools.build:gradle:3.5.0和androidstudio 3.5我的意思是构建工具版本,而不是模块gradle文件中的gradle版本哦。这是29.0.2我进行了检查,发现结果可作为返回,尽管我的
求值表达式显示“未找到”
。您可以添加您的异常日志吗?val drawableBitmap=getBitmapOfVectorDrawable(R.drawable.cs_flip,this)发布的问题不要求通过vector返回位图。我想知道为什么在kotlin文件的调试器中进行计算时它会导致异常尽管我的问题是我从vector drawable创建了一个位图,但不知何故它并没有在画布上绘制,所以我开始调试它,并遇到了找不到的资源。我尝试了png,它成功了。尽管它在kotlin和java中都能工作,即创建了可绘制对象,但调试器存在一些问题,如问题中所述。由于这个原因,我已经发布了答案
private fun getBitmapOfVectorDrawable(resourceId: Int, pContext: Context): Bitmap? {
    return try {
        val drawable: Drawable = AppCompatResources.getDrawable(pContext, resourceId)!!
        if (drawable is BitmapDrawable) {
            drawable.bitmap
        } else if (drawable is VectorDrawableCompat || drawable is VectorDrawable) {
            val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            drawable.setBounds(0, 0, canvas.width, canvas.height)
            drawable.draw(canvas)
            bitmap
        } else {
            throw IllegalArgumentException("unsupported drawable type")
        }
    } catch (ee: java.lang.Exception) {
        Log.e("TAG", ee.message)
        null
    }
}