Почему я не могу открыть файл pdf из хранилища устройства? - PullRequest
0 голосов
/ 08 января 2020

Я сохраняю pdf-файл, который я получаю с сервера с помощью метода:

private boolean writeResponseBodyToDisk(ResponseBody body) {
        try {
            File futureStudioIconFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "order.pdf");

            InputStream inputStream = null;
            OutputStream outputStream = null;

            try {
                byte[] fileReader = new byte[4096];

                long fileSize = body.contentLength();
                long fileSizeDownloaded = 0;

                inputStream = body.byteStream();
                outputStream = new FileOutputStream(futureStudioIconFile);

                while (true) {
                    int read = inputStream.read(fileReader);

                    if (read == -1) {
                        break;
                    }

                    outputStream.write(fileReader, 0, read);

                    fileSizeDownloaded += read;

                    Log.d(TAG, "file download: " + fileSizeDownloaded + " of " + fileSize);
                }

                outputStream.flush();

                return true;
            } catch (IOException e) {
                return false;
            } finally {
                if (inputStream != null) {
                    inputStream.close();
                }

                if (outputStream != null) {
                    outputStream.close();
                }
            }
        } catch (IOException e) {
            return false;
        }
    }

Мне удалось сохранить его на устройстве, хотя, насколько я понял, я не могу открыть его сразу после загрузка, потому что это загрузка от элемента, щелкает в адаптере. Во всяком случае, я сделал так, чтобы после загрузки она меняла страницу на другую активность, где я мог бы открыть ее, хотя она все равно не работает. Код, который я использую в упражнении:

String path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/order.pdf";

    File file=new File(path);

    if(file.canRead())
    {
        pdfView.fromFile(file).defaultPage(1).onLoad(new OnLoadCompleteListener() {
            @Override
            public void loadComplete(int nbPages) {
                Toast.makeText(PdfActivity.this, String.valueOf(nbPages), Toast.LENGTH_LONG).show();
            }
        }).load();

    }

Поскольку код должен быть правильным, я пробовал много вариантов получения пути к PDF, но ни один из них не работал. Проблема в пути или это совсем другая проблема?

Редактировать: он не может прочитать файл в if(file.canRead())

...