Хранение большой CSV (27 МБ) во внутренней памяти в android - PullRequest
0 голосов
/ 07 марта 2020

Мне нужны хранилища большой CSV (27 МБ) во внутренней памяти в android (с kotlin). Все данные CSV должны быть сохранены. После хранения мне нужно перечислить все данные в деятельности (например, в recyclerView). Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 07 марта 2020

Я нашел эту справку

Если вы хотите иметь SQL базу данных, то лучше всего использовать room

С Android 11 вы будете вынуждены использовать объемное хранилище. Старый способ запроса разрешений не будет работать.

Вы можете использовать что-то вроде этого. Пользователь сможет увидеть файл для себя с помощью стандартного Файлового приложения

//opens the File App that is already installed on every Android Device
//it will always save the file in the download folder
//use this start the activity for the File App
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "text/plain"
//user can change the name how he likes later on 
//this is just a suggestion for the name
intent.putExtra(Intent.EXTRA_TITLE, "myCSVFile.csv")
startActivityForResult(intent, 1)

Когда пользователь нажмет OK в Файловом приложении

override fun onActivityResult(request:Int, result:Int, resultData: Intent?){
if(resultData != null && resultData.data != null){
    //this is the URI for the file that the File App has created
    val fUri = resultData.data!!

    //get the file descriptor
    val pfd: ParcelFileDescriptor = applicationContext.contentResolver.openFileDescriptor(fUri, "w")!!
    //create write stream
    val bW = FileOutputStream(pfd.fileDescriptor)

    //first line of csv file
    bW.write(csvHeader.toByteArray())

    //best if these 2 lines are in a loop
    //the string should not be bigger then 100bytes, 
    //I have run into exceptions where it said the parcel size was to big
    bW.write("\n something something something".toByteArray())
    bW.flush()

    bW.close()
}

}

...