[解決済み] FileProvider のクラッシュ - npe が NULL 文字列で XmlResourceParser を呼び出そうとする
2022-05-25 10:51:23
質問
これは私のマニフェストの一部です。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.asd"
android:versionCode="118"
android:versionName="118" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:name="com.example.asd.AsdApplication"
android:allowBackup="true"
android:allowTaskReparenting="true"
android:theme="@style/AsdTheme" >
...
<provider
android:name="com.example.asd.database.hq.ContentProviderDB"
android:authorities="ourContentProviderAuthorities" >
</provider>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.asd.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
</manifest>
これは、raw/xml/filepaths.xmlにあるfilepathsファイルです。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="media"/>
</paths>
インターネットから動画をダウンロードし、この方法で内部ストレージに保存しています。
public static boolean saveInputStreamToInternalStorageFile(Context context, String filename, byte[] dataToWrite, Context ctx) {
FileOutputStream fos;
try {
fos = new FileOutputStream(context.getFilesDir() + File.separator + filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dataToWrite);
oos.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
という感じで使うようにしています。
private void playVideoFromDeviceWithWorkaround(String fileName) {
File newFile = new File(getFilesDir(), fileName);
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), "com.example.asd", newFile);
try {
vvVideoFullscreen.setVideoURI(contentUri);
showMediaControls = true;
playVideo();
} catch (Exception e) {
playVideoFromNetwork();
}
}
この行で
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), "com.example.asd", newFile);
以下のようなエラーが出ます。
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
at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:560)
at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:534)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:376)
どのように解決するのですか?
Manifestにこのような行があることが問題でした。
android:authorities="com.example.asd.fileprovider"
で、getUriForFileを呼び出すときに、私はパスしていました。
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(), "com.example.asd", newFile);
ということで
"com.example.asd"
から
"com.example.asd.fileprovider"
で、うまくいきました。
関連
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
adb devices OffLine Solution(オフラインソリューション
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
Android Get set image.setImageResource(R.drawable.xxx) リソース
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
[解決済み] java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド 'int android.view.View.getImportantForAccessibility()' を呼び出そうとしました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
android:EMSのプロパティ
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
JVMのエラーに遭遇しました。Java Runtime Environmentによって致命的なエラーが検出されました。
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
Android Get set image.setImageResource(R.drawable.xxx) リソース
-
Android基本アプレット
-
アンドロイドリストビュー
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated