在 Kotlin 中,我正在構(gòu)建一個使用相機(jī)的應(yīng)用程序。但是,每當(dāng)我在模擬器或?qū)嶋H設(shè)備上單擊相機(jī)按鈕時,它都會崩潰。我收到以下錯誤。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 用戶已多次詢問過該錯誤類型。解決方案通常是清單文件中的身份驗證與代碼函數(shù)調(diào)用中的用法之間的名稱不匹配,但是沒有提出的解決方案對我有用。這是我進(jìn)行“空引用”調(diào)用的代碼片段: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貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊
這是導(dǎo)致問題的代碼。它在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調(diào)用發(fā)生,并且它正在發(fā)生是因為info是null。(FileProvider類中該方法只有一個調(diào)用點...)
這方面的證據(jù)指向的東西是不對的你定義了你的方式FileProvider
。
檢查/重新檢查文檔。
檢查清單中的拼寫錯誤或不匹配等。
添加回答
舉報
0/150
提交
取消