Итак, я пытаюсь сохранить содержимое представления ресайклера в pdf-файле. Для этого я использовал PDFDocument класс. Я уже добавил разрешение.
uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"
Я не знаю, что я здесь делаю не так. Я пытался изменить расположение хранилища, но каждый раз возникала одна и та же ошибка.
Если кто-нибудь может сказать мне, что я здесь делаю не так. Вот соответствующий код:
if (selectedId == R.id.action_save_pdf) {
// create a new document
PdfDocument document = new PdfDocument();
// crate a page description
PdfDocument.PageInfo pageInfo =
new PdfDocument.PageInfo.Builder(100, 100, 1).create();
// start a page
PdfDocument.Page page = document.startPage(pageInfo);
// finish the page
document.finishPage(page);
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/MyPDFDocument");
if (!dir.exists()) {
dir.mkdir();
}
File filePath = new File(dir, "questions.pdf");
try {
document.writeTo(new FileOutputStream(filePath));
Toast.makeText(this, "Saved to PDF", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Save Unsuccessful!",
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "External Storage not available!", Toast.LENGTH_SHORT).show();
}
// close the document
document.close();
return true;
}
return super.onOptionsItemSelected(item);
}
Заранее благодарю.
@sunilsunny Я пытался сделать то, что ты сказал. Все еще та же ошибка
if (!dir.exists()) { dir.mkdir(); } Это должно быть: if (!dir.exists()) { if ( !dir.mkdir()) {Toast(... could not make dir ....); return;}; }. Кровать каталог не создается.
@sunil солнечный There should be something like filePath.createNewFile(); then only that file will be created. – sunil sunny 56 mins ago. Бред какой то. new FileOutputStream(filePath) создаст файл. Хорошо, если каталог существует и разрешения предоставлены.
thought this line File filePath = new File(dir, "questions.pdf"); creates the necessary file. Нет. Не будет. Но это тоже не нужно.
@greenapps Я попытался изменить это, и да, теперь я знаю, что каталог не создан, но почему он не создается? Я думал, что это делает команда dir.mkdir (). А также я добавил необходимое разрешение, как вы можете видеть, что я опубликовал выше. Итак, что мне не хватает?
Thank You well in advance. Ну, я не могу сказать вам, как я люблю делать это до благодарности.
Позвольте нам продолжить обсуждение в чате.




я нашел свой ответ. На самом деле в android уровень API> 23 вам нужно запросить разрешение на выполнение для WRITE_EXTERNAL_STORAGE. Поскольку он включен в опасные разрешения, вы должны предоставить разрешения времени выполнения, чтобы пользователь мог явно разрешить эти разрешения. Таким образом, просто добавить разрешение на запись во внешнее хранилище в манифесте не получится.
Ниже приведены ссылки, которые я использовал для решения моей проблемы.
https://developer.android.com/training/permissions/requesting.html#java
Я думал, что эта строчка
File filePath = new File(dir, "questions.pdf");создает нужный файл.