异常尝试调用虚拟方法

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>