앱의 데이터 내보내기 및 가져오기 기능
4206 단어 android
휴대전화가 선택이 아닌 일상의 필수 도구가 된 지 오래다. 사람들은 모든 종류의 중요한 일을 위해 앱을 사용하고 있으며 이러한 앱 중 하나에 대한 액세스 권한이 손실되면 사람들은 화를 낼 것입니다.
그러한 앱의 앱 개발자가 되는 것은 약간의 책임이 있습니다. 사용자는 데이터를 백업하고 필요에 따라 새 장치로 전송할 수 있어야 합니다. Android에는 사용자가 새 기기를 받을 때 앱 데이터를 복원하는 기능auto-backup feature이 있습니다. 그러나 때로는 이 메커니즘이 실패하고 중요한 데이터에 대한 주문형 내보내기/가져오기 기능이 있는 필수 앱의 경우 사용자에게 약간의 마음을 줍니다.
이 게시물에서는 이러한 메커니즘을 구현하는 가장 간단한 방법을 설명합니다. 가장 효율적이거나 진보된 방법은 아닐지 모르지만 기본적인 것이 필요하다면 그것으로 충분할 것입니다.
회의실 데이터베이스 대량 쿼리
우선 데이터를 데이터베이스로 대량 추출하고 대량으로 가져올 수 있는 방법이 필요합니다. Jetpack Room 을 사용하고 있다고 가정하고 요즘 Android 세계에서 사실상의 DB 계층이라고 생각하는 DAO 객체를 확장하여 다음을 포함합니다.
@Dao
interface ItemsDao {
[...]
@Query("SELECT * FROM item")
fun listAll(): List<Item>
@Insert
fun insertAll(tasks: List<Item>): List<Long>
}
데이터 내보내기
private val exportDataLauncher =
registerForActivityResult( // 1.
ActivityResultContracts.CreateDocument()) { // 2.
if (it == null) return@registerForActivityResult // 3.
val jsonString = Gson().toJson(itemsDao.listAll()) // 4.
requireContext().contentResolver.openOutputStream(it) // 5.
?.bufferedWriter()?.apply {
write(jsonString)
flush()
}
}
fun onExportDataClicked() {
exportDataLauncher.launch("backup${Date().time}.json") // 6.
}
registerForActivityResult()
를 호출해야 합니다. ActivityResultContract
라는 "내장"CreateDocument
을 사용하고 있습니다. 이름에서 알 수 있듯이 사용자가 내보낸 파일을 저장할 위치를 결정할 수 있도록 파일 선택기를 엽니다. null
가 포함됩니다. itemsDao.listAll()
의 결과를 간단한 문자열로 직렬화합니다. Uri
입니다. ContentResolver
를 사용하여 Uri
를 OutputStream
로 변환하고 JSON 문자열을 파일 시스템에 씁니다. ActivityResultContract
의 입력은 기본 파일 이름입니다. 이 방법을 사용하여 파일을 덮어쓸 수 없으므로 이미 존재하는 파일을 선택하면 번호가 붙은 접미사가 추가됩니다(예: "파일(1)", "파일(2)"등). 데이터 가져오기
private val importDataLauncher = registerForActivityResult(
ActivityResultContracts.OpenDocument()) { // 1.
if (it == null) return@registerForActivityResult
val jsonString = // 2.
requireContext().contentResolver.openInputStream(it)
?.bufferedReader()?.readText() ?: "[]"
val listType: Type = object : TypeToken<List<Item>>() {}.type
val items: List<Item> =
Gson().fromJson(jsonString, listType) // 3.
itemsDao.insertAll(items) // 4.
}
fun onImportDataClicked() {
importDataLauncher.launch(arrayOf("*/*")) // 5.
}
Uri
를 InputStream
로 변환합니다. ActivityResultContract
의 입력은 허용된 파일의 MIME 유형입니다. 이제 빠른 데이터 가져오기/내보내기 기능을 생성할 수 있는 빠른 메커니즘이 생겼기를 바랍니다. 위의 코드 스니펫에는 적절한 오류 처리 기능이 없으므로 실제 앱에서 사용하기 전에 직접 추가해야 합니다.
즐거운 코딩하세요!
Reference
이 문제에 관하여(앱의 데이터 내보내기 및 가져오기 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rockandnull/export-and-import-data-functionality-for-your-app-23l4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)