为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会得到这个 NullPointerException:

为什么我会得到这个 NullPointerException:

芜湖不芜 2021-06-17 18:23:46
在 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? = nullval TAKE_PICTURE = 1val SELECT_PICTURE = 2fun 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"/>
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

这是导致问题的代码。它在FileProvider课堂上。


    final ProviderInfo info = context.getPackageManager()

            .resolveContentProvider(authority, PackageManager.GET_META_DATA);

    final XmlResourceParser in = info.loadXmlMetaData(

            context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);

堆栈跟踪清楚地表明 NPE 正在为loadXmlMetaData调用发生,并且它正在发生是因为info是null。(FileProvider类中该方法只有一个调用点...)

这方面的证据指向的东西是不对的你定义了你的方式FileProvider

  • 检查/重新检查文档

  • 检查清单中的拼写错误或不匹配等。


查看完整回答
反对 回复 2021-06-30
  • 1 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信