2017-05-06 107 views
0

我想安装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代码将文件传递给意图

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, "[email protected]"); 
    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

请帮

回答

0

我通过将我的导出文件放到另一个子文件夹(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[]{ "[email protected]"}); 
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> 
1

相反的:

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"); 
+0

我这样做,但现在另一个错误出现: java.lang.IllegalArgumentException异常:未能找到配置根目录包含/data/data/com.example.jernej.glukozko/files/meritve.csv –

+0

发布错误日志..在这里注释 – rafsanahmad007

+0

java.lang.IllegalArgumentException:未能找到包含/ data/data/com.example.jernej.glukozko/files/meritve.csv –

相关问题