Создание и запись в файл на Android

#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 для информирования пользователя…