Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
“我如何解决?”;NullPointerException:null不能转换为非null类型android.graphics.Bitmap";?_Android_Kotlin - Fatal编程技术网

“我如何解决?”;NullPointerException:null不能转换为非null类型android.graphics.Bitmap";?

“我如何解决?”;NullPointerException:null不能转换为非null类型android.graphics.Bitmap";?,android,kotlin,Android,Kotlin,我一直在努力学习本教程:我使用一个imagebutton,所以我打开相机拍照,但当我接受照片时,它就崩溃了: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.bujess, PID: 15270 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null}

我一直在努力学习本教程:
我使用一个imagebutton,所以我打开相机拍照,但当我接受照片时,它就崩溃了:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.bujess, PID: 15270
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.bujess/com.example.bujess.WritingActivity}: java.lang.NullPointerException: null cannot be cast to non-null type android.graphics.Bitmap
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5097)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5138)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:7814)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
     Caused by: java.lang.NullPointerException: null cannot be cast to non-null type android.graphics.Bitmap
        at com.example.bujess.WritingActivity.onActivityResult(WritingActivity.kt:61)
        at android.app.Activity.dispatchActivityResult(Activity.java:8292)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5090)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5138) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:237) 
        at android.app.ActivityThread.main(ActivityThread.java:7814) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) 
最可疑的一行是“at com.example.bujess.WritingActivity.onActivityResult(WritingActivity.kt:61)”。但这些是我从活动结果指南中抄来的:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            val imageBitmap = data?.extras?.get("data") as Bitmap
            val imageView = findViewById<ImageView>(R.id.opGallNCam)
            imageView?.setImageBitmap(imageBitmap)
            galleryAddPic()
        }
    }
override-on-activityresult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
if(requestCode==REQUEST\u IMAGE\u CAPTURE&&resultCode==RESULT\u OK){
val imageBitmap=数据?.extras?.get(“数据”)作为位图
val imageView=findViewById(R.id.opGallNCam)
imageView?.setImageBitmap(imageBitmap)
galleryAddPic()
}
}
第61行是:“val imageBitmap=data?.extras?.get(“data”)as Bitmap”
opGallNCam是ImageButton的Id 我是科特林的新手。我先谢谢你

java.lang.NullPointerException:null不能强制转换为非null类型的android.graphics.Bitmap

问题是:
data?.extras?.get(“data”)
返回一个
null
值,您试图将该
null
转换为
位图

首先
data?.extras?.get(“data”)
不会返回位图,但您可以先使用
data?获取
Uri
对象。data
,然后将其转换为
位图
,如下图所示,将
onActivityResult
方法更改为:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == 10 && resultCode == RESULT_OK) {
        val imageUri = data?.data as Uri
        var imageBitmap: Bitmap
        
        val bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            imageBitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(contentResolver, imageUri))
        } else {
            imageBitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri)
        }
        
//............... rest of your code
        

为了避免抛出异常,可以将安全强制转换操作符用作?失败时返回null

val imageBitmap = data?.extras?.get("data") as? Bitmap
看看这个,你会知道更多的