异常尝试调用虚拟方法
Exception Attempt to invoke virtual method
我正在尝试设置 FileProvider,但遇到了很多问题。最新的是以下异常:
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
我的 FileProvider 如下所示:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.jernej.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
我的路径 xml 文件如下所示:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="csv_file" path="files/"/>
</paths>
并且在 MainActivitiy 中我使用此代码将文件传递给 intent
File exportDir = new File(getFilesDir(), "");
File file = new File(exportDir, "meritve.csv");
File pot=new File(file.getAbsolutePath());
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej", pot);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/csv");
sendIntent.putExtra(Intent.EXTRA_EMAIL, "mail.example@gmail.com");
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sendIntent, "Send E-mail..."));
我什至不知道我是否正确设置了 FileProvider。该文件位于目录 /data/data/com.example.jernej.glukozko/files
请帮忙
而不是:
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej", pot);
使用清单中的 android:authorities
:
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej.fileprovider", pot);
编辑
在您的代码中:使用
File exportDir = new File(getFilesDir(), "files"); //change here
File file = new File(exportDir, "meritve.csv");
我通过将导出文件放入另一个子文件夹 (exportFolder) 解决了这个问题。
File exportDir = new File(getFilesDir(), "exportFolder"); // here is where i made the first fix
File file = new File(exportDir, "meritve.csv");
File pot=new File(file.getAbsolutePath());
Uri uri = FileProvider.getUriForFile(MainActivity.this,"com.example.jernej.fileprovider", pot); // this is the second fix
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/csv");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{ "mail.example@gmail.com"});
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sendIntent, "Send E-mail..."));
所以我不得不更正我的路径,所以现在它看起来像这样:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="csv_file" path="exportFolder/"/>
</paths>
我正在尝试设置 FileProvider,但遇到了很多问题。最新的是以下异常:
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
我的 FileProvider 如下所示:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.jernej.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
我的路径 xml 文件如下所示:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="csv_file" path="files/"/>
</paths>
并且在 MainActivitiy 中我使用此代码将文件传递给 intent
File exportDir = new File(getFilesDir(), "");
File file = new File(exportDir, "meritve.csv");
File pot=new File(file.getAbsolutePath());
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej", pot);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/csv");
sendIntent.putExtra(Intent.EXTRA_EMAIL, "mail.example@gmail.com");
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sendIntent, "Send E-mail..."));
我什至不知道我是否正确设置了 FileProvider。该文件位于目录 /data/data/com.example.jernej.glukozko/files
请帮忙
而不是:
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej", pot);
使用清单中的 android:authorities
:
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.jernej.fileprovider", pot);
编辑
在您的代码中:使用
File exportDir = new File(getFilesDir(), "files"); //change here
File file = new File(exportDir, "meritve.csv");
我通过将导出文件放入另一个子文件夹 (exportFolder) 解决了这个问题。
File exportDir = new File(getFilesDir(), "exportFolder"); // here is where i made the first fix
File file = new File(exportDir, "meritve.csv");
File pot=new File(file.getAbsolutePath());
Uri uri = FileProvider.getUriForFile(MainActivity.this,"com.example.jernej.fileprovider", pot); // this is the second fix
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/csv");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{ "mail.example@gmail.com"});
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sendIntent, "Send E-mail..."));
所以我不得不更正我的路径,所以现在它看起来像这样:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="csv_file" path="exportFolder/"/>
</paths>