【问题标题】:Android Fileprovider unable to get uriAndroid Fileprovider 无法获取 uri
【发布时间】:2018-10-30 10:04:33
【问题描述】:

我使用 Fileprovider 获取我手动保存在设备存储中的文件夹“F1”中的图像的 Uri。当我尝试获取 Uri 时,我得到 NullPointerException。例外是我尝试访问 Uri 的地方。我在 Manifest 中声明了提供者,并在 xml 文件中声明了路径。我在 xml 中设置了错误的路径吗?

代码:

 folder=new File(Environment.getExternalStorageDirectory()+"/F1");
folder.mkdirs();
 File file1=new File(folder+"/37deb43.jpg");
            Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",file1);

Manifest.xml:

<provider
            android:authorities="${applicationId}"
            android:name="android.support.v4.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/share_file_paths"
                >
            </meta-data>
        </provider>

@xml/share_file_paths:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
    name="external_files"
    path="F1">
</external-files-path>
</paths>

例外:

 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:604)
        at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:578)
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:416)
        at com.globemaster.com.architecturecomponentstest.mvvm.java_technical_programs.JavaTechnicalActivity.fetchuri(JavaTechnicalActivity.java:179)
        at com.globemaster.com.architecturecomponentstest.mvvm.java_technical_programs.JavaTechnicalActivity.access$200(JavaTechnicalActivity.java:30)
        at com.globemaster.com.architecturecomponentstest.mvvm.java_technical_programs.JavaTechnicalActivity$4.onClick(JavaTechnicalActivity.java:130)
        at android.view.View.performClick(View.java:5716)
        at android.widget.TextView.performClick(TextView.java:10926)
        at android.view.View$PerformClick.run(View.java:22596)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • whats new File(file+"/37deb43.jpg"); file 参数在那里?那不应该是folder ??
  • 对不起,我打错了。那是文件夹本身。我现在改了
  • 如我的回答中所见,在getUriForFile 中也使用file1

标签: android uri android-fileprovider


【解决方案1】:

我终于明白了。问题出在getUriForFile()的第二个参数上。

Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",file1);

我在下面的"BuildConfig.APPLICATION_ID" 后面附加了“提供者”。这不是必需的。下面的代码现在可以正常工作了。但是感谢大家努力帮助我 ..

Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID,file1);

【讨论】:

    【解决方案2】:

    我猜你的第一个 sn-p 中有一个复制粘贴错误!试试这个:

    File folder=new File(Environment.getExternalStorageDirectory(), "F1");
    folder.mkdirs();
    File file1=new File(folder, "37deb43.jpg");
    Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",file1);
    Log.d("URI", "Uri is: " + uri)
    

    【讨论】:

    • 这是一个错误。我改了它。但它是我班级代码中的文件夹。
    • 请发布日志输出
    • 我已经包含在我得到的异常上面。代码在一个方法中。只是我没有在这里包含该方法。
    • 会不会是我在share_file_paths中设置的路径
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多