получение нулевого значения при просмотре файла PDF в встроенном браузере файлов [дубликат]

Когда вы вызываете free(phead), память phead указывает на освобождение, но значение phead остается нетронутым, делая указатель phead a болтающимся . Доступ к освобожденной памяти создает неопределенное поведение.

Хорошей практикой является назначение указателя NULL указателю, когда вы освободите память, на которую он указывает:

free(phead);
phead = NULL;
1
задан Tonher 11 March 2018 в 15:51
поделиться

1 ответ

Я не нашел, как я могу получить файл из Uri.

Нет файла. ACTION_OPEN_DOCUMENT и ACTION_GET_CONTENT не открывают файл. Они открывают документ. Этот документ может быть файлом. Возможно, это не так. Это Uri может указывать на:

  • Локальный файл на внешнем хранилище
  • Локальный файл на внутренней памяти для другого приложения
  • Локальный файл на съемном носителе
  • Локальный файл, который зашифрован и нуждается в расшифровке на лету
  • Поток байтов, хранящихся в столбце BLOB в базе данных
  • Часть содержимого, которое нужно загрузить другим приложением сначала
  • ... и т. д.

Как я могу получить реальную путь к файлу?

У вас нет.

Если вы хотите только принимать файлы, интегрируйте библиотеку выбора файлов вместо используя ACTION_OPEN_DOCUMENT или ACTION_GET_CONTENT.

Если вы используете ACTION_GET_CONTENT, а схема Uri, которую вы получаете, это file, тогда getPath() будет файловым путем.

В противном случае вам нужно понять, что вы не знаете, откуда документ выходит из , и перестать думать с точки зрения «реального пути к файлу». Используйте ContentResolver и openInputStream() или DocumentFile.fromSingleUri() или аналогичные методы для работы с Uri.

1
ответ дан CommonsWare 16 August 2018 в 02:26
поделиться
  • 1
    Спасибо за ответ ! Я признаю, что схватил код, не зная, что это значит. Я проверю этот веб-сайт, кажется, действительно интересно. – Tonher 11 March 2018 в 16:13
Другие вопросы по тегам:

Похожие вопросы: