#android #opencsv
#Android #opencsv
Вопрос:
Я новичок в программировании на Android. Я пытаюсь создать файл csv в общем хранилище устройства Android. Затем я хочу добавить строки в этот файл на основе пользовательских данных. Похоже, что с Android 11 процесс создания и редактирования файла в общем хранилище изменился, и я совершенно не понимаю, как это сделать.
До сих пор мне удавалось создать файл csv, но, похоже, я никак не могу его отредактировать. Это код, который я использовал для создания файла csv:
File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Uri baseDirUri = Uri.fromFile(baseDir);
String fileName;
String noteFile;
private void createFile() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/csv");
String currentTime = getPhoneTime();
fileName = "notes_" currentTime ".csv";
intent.putExtra(Intent.EXTRA_TITLE, fileName);
// Optionally, specify a URI for the directory that should be opened in
// the system file picker when your app creates the document.
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, baseDirUri);
startActivityForResult(intent, 1);
noteFile = baseDir.getAbsolutePath() "/" fileName;
writeToCsv("Time;ROS Time;Event;Team;Description;Ticket");
}
Затем я использую OpenCSV для попытки записи в файл csv:
private void writeToCsv(String line) {
try {
// create FileWriter object with file as parameter
FileWriter outputfile = new FileWriter(noteFile);
// create CSVWriter object filewriter object as parameter
CSVWriter writer = new CSVWriter(outputfile);
writer.writeNext(line.split(";"));
// closing writer connection
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Но файл пуст, когда я перехожу к его просмотру. Что я делаю не так? Спасибо за помощь!
Комментарии:
1. Вы записываете путь к файлу, который не имеет ничего общего с ACTION_CREATE_DOCUMENT .
2. Ваш startActivituForResult должен сопровождаться реализацией onActivituResult.
3. Далее, если бы вы поместили Toast() в этот блок catch для информирования пользователя…