(코틀린) 엑셀 데이터를 FireStore에 추가하기

Firebase에는 데이터베이스로 두 가지 종류가 있습니다. 

1. Realtime Database : 연결된 모든 클라이언트에서 실시간으로 데이터를 저장하고 동기화할 수 있습니다.

2. Cloud FireStore : 더욱 강력한 쿼리와 자동 확장 기능을 갖춘 차세대 실시간 데이터베이스입니다.

요약하자만, Cloud FireStore는 Realtime Database의 업그레이드 버전인 셈이죠. 

앞으로도 더욱 발전 가능성이 있다고 하니,

이제 시작하시는 분들은 FireStore로 데이터베이스를 구축하는 게 좋을 듯합니다.

 

저는 어플 내 Assets 폴더에 엑셀 파일을 추가하고 불러오는 방식을 이용하려고 했지만,

실시간으로 데이터를 업그레이드시켜주기 위해서, FireStore를 사용하려고 합니다.

 

그. 런. 데. Realtime Database에서는 JSON 가져오기라는 것이 있어 데이터를 저장하기가 편했는데,

여기엔 찾아봐도 그런 것이 없네요.

 

그래서 데이터를 저장해주는 임시 어플을 하나 만들어보겠습니다.

1. Build.gradle 라이브러리 추가

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    //firebase
    implementation 'com.google.firebase:firebase-core:17.1.0'
    implementation 'com.google.firebase:firebase-analytics:17.1.0'
    implementation 'com.google.firebase:firebase-firestore:21.0.0'

    //엑셀파일 읽기 쓰기
    implementation 'org.apache.poi:poi:3.9'
    implementation "org.apache.poi:poi-ooxml:3.9"
}

dependencies에 firebase와 poi 라이브러리를 추가해줍니다.

 

2. Firebase 연결

파이어베이스 연결은 이전 포스팅을 참고해주세요~^^
2019/08/24 - [안드로이드 개발/Kotlin으로 어플 만들기] - (코틀린) firebase console 연결하기(프로젝트 만들기)

 

(코틀린) firebase console 연결하기(프로젝트 만들기)

어플 내에서 서버를 이용하는 방법은 서버 컴퓨터를 만들거나, 무료 호스팅 서버를 이용하거나 등등 여러 가지가 있을 텐데요, 저는 Firebase의 Database를 통해 자료를 주고받을 계획입니다. 그렇다면, Firebase..

hamzzibari.tistory.com

3. Assets 폴더 만들기

에셋 폴더를 만들어줍니다. 이것도 아래 포스팅을 참고해주세요~!

2019/08/04 - [안드로이드 개발] - [Android Studio] assets 폴더 만들기

 

[Android Studio] assets 폴더 만들기

Assset 폴더 생성 안드로이드 개발을 하다보면, 엑셀(.xls)파일을 파싱해야 하는 경우가 있습니다. 이런 파일들을 사용하기 위해서는 assets 폴더에 넣어야 하는데, 안드로이드 스튜디오는 기본적으로 assets 폴..

hamzzibari.tistory.com

4. 엑셀 파일 추가, 불러오기

이제 엑셀 파일(.xls)을 불러오는 작업을 할 거예요.

(xlsx 파일로 도전하려 했으나 자꾸 오류가 나서...ㅠ 결국 xls로 도전했답니다.)

이것도!!! 이전 포스팅에 있습니다.. ㅎㅎ

2019/08/06 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(1)

 

(Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(1)

이 전 포스팅에서 RecyclerView까지 만들었는데 이어서 만들어보겠습니다. 2019/08/04 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) RecyclerView 사용하기 (Kotlin) RecyclerView 사용하기 1. Layout..

hamzzibari.tistory.com

5. FireStore에 데이터 넘기기

1) firestore 규칙

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

사용자가 데이터를 보내 저장하는 것이 있다면 write 제한을 풀어줘야 합니다. 테스트 모드로 시작합니다.

2) 코틀린

//cloud firestore 초기화, 콜렉션은 여기서 해도 되고 아래에서 정의해도 됩니다. 
val quiz_db = FirebaseFirestore.getInstance().collection( "quiz_hb")

//저장할 데이터를 만들어줍니다. (dataToSave는 mutableMapOf로 정의해줬습니다)
dataToSave.put( "no" , itemlist[i].item_no)
dataToSave.put("year" , itemlist[i].year)
dataToSave.put("exam" , itemlist[i].exam)
dataToSave.put("fullname" , itemlist[i].fullname)

//저는 여러개의 다큐먼트가 필요해서 다큐먼트도 유동적으로 생성되게 했습니다. 
quiz_db.document(itemlist[i].item_no)
	//set("저장할 데이터")
	.set(dataToSave)
	.addOnSuccessListener { documentReference ->
		Log.d(TAG, "저장 성공")
	}
	.addOnFailureListener { e ->
		Log.w(TAG, "Error adding document", e)
	}

코드가 매우 간단하죠? ㅎㅎ 

 

6 결과물

이렇게 컬렉션(quiz_hb)에 여러 가지 다큐먼트(hb_0000x)가 생성되었고,

그 안에 필드(DataToSave)가 잘 저장되어 있는 모습입니다.

 

끝.

댓글

Designed by JB FACTORY