猿问

为什么我会得到这个 NullPointerException:

在 Kotlin 中,我正在构建一个使用相机的应用程序。但是,每当我在模拟器或实际设备上单击相机按钮时,它都会崩溃。我收到以下错误。


java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference

此错误类型是非特定的,Java(非 kotlin)lang 用户已多次询问过该错误类型。解决方案通常是清单文件中的身份验证与代码函数调用中的用法之间的名称不匹配,但是没有提出的解决方案对我有用。


这是我进行“空引用”调用的代码片段:


var currentPath: String? = null

val TAKE_PICTURE = 1

val SELECT_PICTURE = 2


fun dispatchCameraIntent() {

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)

    if(intent.resolveActivity(packageManager) != null){

    var photoFile: File? = null

    try {

        photoFile = createImage()

    }catch (e: IOException){

        e.printStackTrace()

    }

    if (photoFile != null){

        // you must create a content provider matching the authority

        var photoUri = FileProvider.getUriForFile(this, "com.my_company.my_app.fileprovider", photoFile)

        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)

        startActivityForResult(intent, TAKE_PICTURE)

    }

   }

}


    fun createImage(): File{

        val timeStamp =       SimpleDateFormat("yyyyMMMM_HHmmss").format(Date())//getDateTimeInstance()

        val imageName = "JPEG_"+timeStamp+"_"

        var storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)

        var image = File.createTempFile(imageName, ".jpg", storageDir)

        currentPath = image.absolutePath

        return image

    }

我的 xml file_paths 文件位于 res>xml>file_paths.xml,如下所示:


<?xml version="1.0" encoding="utf-8"?>


<paths     xmlns:android="http://schemas.android.com/apk/res/android">

<external-path

    name="my_pictures"

        path="SDCARD/Android/data/com.my_company.my_app/files/Pictures"/>


芜湖不芜
浏览 231回答 1
1回答

ibeautiful

这是导致问题的代码。它在FileProvider课堂上。&nbsp; &nbsp; final ProviderInfo info = context.getPackageManager()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .resolveContentProvider(authority, PackageManager.GET_META_DATA);&nbsp; &nbsp; final XmlResourceParser in = info.loadXmlMetaData(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);堆栈跟踪清楚地表明 NPE 正在为loadXmlMetaData调用发生,并且它正在发生是因为info是null。(FileProvider类中该方法只有一个调用点...)这方面的证据指向的东西是不对的你定义了你的方式FileProvider。检查/重新检查文档。检查清单中的拼写错误或不匹配等。
随时随地看视频慕课网APP

相关分类

Java
我要回答