Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Fileprovider无法获取uri_Android_Uri_Android Fileprovider - Fatal编程技术网

Android Fileprovider无法获取uri

Android Fileprovider无法获取uri,android,uri,android-fileprovider,Android,Uri,Android Fileprovider,我使用Fileprovider获取我手动保存在设备存储中文件夹“F1”中的图像的Uri。当我尝试获取Uri时,我得到NullPointerException。例外情况是我尝试访问Uri的位置。我在清单中声明了提供者,并在xml文件中声明了路径。我在xml中是否设置了错误的路径 代码: Manifest.xml: <provider android:authorities="${applicationId}" android:name="and

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

代码:

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>

我猜您的第一个代码片段中存在复制粘贴错误!试试这个:

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)

问题出在
getUriForFile()
中的第二个参数中

我在下面的
“BuildConfig.APPLICATION\u ID”
中添加了“provider”。这是不需要的。下面的代码现在可以正常工作了。但是感谢大家努力帮助我


什么是新文件(File+“/37deb43.jpg”);
文件
参数在那里?那不应该是
文件夹
?很抱歉,我打错了。那是文件夹本身。我现在更改了它,在
getUriForFile
中使用
file1
,正如我的回答中所看到的那样,那是一个错误。我更改了它。但它是类中我代码中的文件夹。请发布logI的输出,包括我得到的异常。代码是在一个方法中。只是我没有在这里包括这个方法。它可能是我在share\u file\u path中设置的路径吗
<?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)
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)
Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",file1);
Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID,file1);