Хранение и извлечение каталога Uri в / из SharedPreferences - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь сохранить и получить каталог Uri с помощью SharedPreferences, но не могу заставить его работать.

Это мой текущий код для сохранения пути к каталогу после того, как пользователь выбрал каталог:

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch(requestCode) {
                case ACTIVITY_DOCUMENT_TREE:
                    if(resultCode == RESULT_OK) {
                        Uri treeUri = data.getData();
                        DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), treeUri);

                        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
                        SharedPreferences.Editor editor = prefs.edit();
                        editor.putString("the_file", pickedDir.getUri().toString());
                        editor.apply();
                    }
                    break;
            }
        }

Это мой текущий код для загрузки каталога из SharedPreferences:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String path = prefs.getString("the_file", null);
// the value is:
// content://com.android.externalstorage.documents/tree/primary%3APictures%2FMyApp/document/primary%3APictures%2FMyApp
Uri uri = Uri.parse(path);
File f = new File(uri.toString());
// to test if it was successful, listFiles() - this leads to a NullPointerException
f.listFiles();
// java.lang.NullPointerException: Attempt to get length of null array

Вместо uri.toString () я также попробовал uri.getPath (), с тем же результатом.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 04 июля 2018

Я получил его на работу сейчас. Вместо DocumentFile я попытался создать обычный объект File из строки uri.

Это скорректированный код:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String path = prefs.getString("the_file", null);
Uri uri = Uri.parse(path);
DocumentFile dir = DocumentFile.fromTreeUri(getActivity(), uri);
dir.listFiles(); // working fine now
...