Android Fileprovider не может получить URI - PullRequest
0 голосов
/ 30 октября 2018

Я использую Fileprovider для получения Uri изображения, которое я сохранил вручную в папке «F1» в Device Storage. Когда я пытался получить Uri, я получаю исключение NullPointerException. Исключение - там, где я пытаюсь получить доступ к Ури. Я объявил провайдера в манифесте и объявил пути в файле 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)

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Я наконец понял. Проблема была во втором аргументе в getUriForFile().

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

Я добавил "провайдера" к "BuildConfig.APPLICATION_ID" ниже. Это было не нужно. Нижеприведенный код работает нормально. Но спасибо всем за ваши усилия в попытке помочь мне ..

Uri uri= FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID,file1);
0 голосов
/ 30 октября 2018

Я полагаю, у вас ошибка копирования-вставки в вашем первом фрагменте! Попробуйте это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...