Я пытаюсь прочитать PDF-файл из мобильной памяти Android, но он показывает «ошибка загрузки pdf»

#android #android-studio #android-layout

#Android #android-studio #android-layout

Вопрос:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdf_viewer);
        pdfView=(PDFView)findViewById(R.id.pdfView);
        Bundle extras = getIntent().getExtras();
        url = extras.getString("url");
        Uri uri=Uri.parse(url);
 pdfView.fromUri(uri)
 .pages(0, 2, 1, 3, 3, 3) 
                        .enableSwipe(true)
                        .swipeHorizontal(true)
                        .enableDoubletap(true)
                        .defaultPage(0)
                        .enableAnnotationRendering(false)
                        .password(null)
                        .scrollHandle(null)
                        .enableAntialiasing(true)                        
                        .spacing(2)
                        .autoSpacing(true) 
                        .pageFitPolicy(FitPolicy.WIDTH)
                        .fitEachPage(true) 
                        .pageSnap(true) 
                        .pageFling(true)
                        .nightMode(false) 
                        .load();
            } 
  

Файл находится в указанном пути к файлу: /storage/ emulated/0/Android/data/edu/files/101.pdf , и я везде получаю правильный путь, но все равно получаю ошибку ниже:

2020-10-30 02:58:17.947 7146-7146/edu E / PDFView: ошибка загрузки pdf java.io.FileNotFoundException: нет поставщика контента: / storage/ emulated/0/Android/data/edu/files/ 101.pdf

Я старался до предела, но не смог найти ошибку, пожалуйста, укажите мне, где я ошибаюсь?

Комментарии:

1. url это путь к файловой системе, а не Uri . Не используйте Uri.parse() . Используйте Uri.fromFile(new File(url)) .

2. Все работает нормально. Вы действительно спасли мне жизнь… Спасибо за тонну.

Ответ №1:

Полезная Uri имеет схему, такую как content , https , или file . Uri.parse() будет проанализирован путь к файловой системе, но он не вводится file в качестве схемы, и результат Uri обычно бесполезен.

Итак, если у вас есть путь к файловой системе в виде строки, и вам нужно Uri , используйте Uri.fromFile(new File(...)) , где ... этот путь.