반응형
안녕하세요. 훈츠 입니다. 오늘은 구글 파이어베이스에 GsonConvert class 객체를 적용해 json 파일로, 변환하고 json파일을 gson 객체로 변환하는 방법에 대해 포스팅 해봅니다. 객체 설명은 다음 포스팅을 읽으시면 도움이 될것 같습니다.
https://rain2002kr.tistory.com/53?category=374708
그리고 FireBase project 는 다음 블로그를 읽어 보시면 됩니다.
https://rain2002kr.tistory.com/50?category=375057
이 둘을 합쳐서 프로젝트를 만들어 보았습니다. 연습 프로젝트라 깔끔하지 못하지만 Firebase 와 연동 테스트 하는데 있어서 좋은 예제가 될것 같습니다.
build.gradle 에 Gson 라이브러리 추가
implementation 'com.google.code.gson:gson:2.8.6' //현재 최신버젼
GsonConvert 클래스 추가 및 Data class Person 만들기
data class Person(val name:String, val number:String)
class GsonConvert(){
var gson : Gson
var listType : TypeToken<MutableList<Person>> = object : TypeToken<MutableList<Person>>() {}
var persons = mutableListOf<Person>()
var js :String = ""
var gs = mutableListOf<Person>()
init{
gson = GsonBuilder().create()
}
companion object{
private var lastindex = 0 //lastindex
var contacts = mutableListOf<Person>()
}
//Contact 객체 추가
fun put(contact : Person) {
persons.add(contact)
lastindex = persons.lastIndex
}
//Contacts List 객체 돌려주기
fun get():MutableList<Person>{
return contacts
}
//Json 객체 돌려주기
fun jsGet():String{
js = gson.toJson(persons,listType.type)
return js
}
//Gson 객체 돌려주기
fun gsGet():MutableList<Person> {
gs = gson.fromJson(js,listType.type)
return gs
}
//Gson 객체 돌려주기
fun gsGet(js:String?):MutableList<Person> {
gs = gson.fromJson(js,listType.type)
return gs
}
//Contacts List lastIndex 값 돌려주기
fun lastIndex():Int{
lastindex = persons.lastIndex
return lastindex
}
}
MainActivity 에 구현 하기
GsonConvert 선언
//gsonConvert 선언
var gsonConvert : GsonConvert = GsonConvert()
//GenericType 선언
var t: GenericTypeIndicator<MutableMap<String,Any>> =
object : GenericTypeIndicator<MutableMap<String,Any>>() {}
Firebase 에 데이터 추가 하기 전 순서
- Person(name, number) 를 gsonConvert에 put 하기
- gsonConvert에서 json 객체 받아오기
- hashMap 에 json 객체 추가하기
- Firebase에 hashMap 추가하기
//TODO PostFireBase function
fun postFirebaseDatabase(add: Boolean) {
mPostReference = FirebaseDatabase.getInstance().reference
val childUpdates: MutableMap<String, Any?> = HashMap()
var name = ed2.text.toString() //edtext2 에서 name 값 받아오기
var number = ed3.text.toString()//edtext3 에서number 값 받아오기
var person = Person(name, number) //Person info 추가 하기
gsonConvert.put(person) //gsonConvert에 추가하기
var js = gsonConvert.jsGet() //gsonConvert로 부터 js객체 받아오기
//var lastindex = gsonConvert.lastIndex()
childUpdates.put("key".toString(), js) //hashmap에 js객체 추가하기
if (add) {
val dbName = ed1.text.toString()
mPostReference.child(dbName).updateChildren(childUpdates) //firebase에 js객체 추가하기
}
}
Firebase 에 데이터 받아 오기
- Json type 을 GenericTypeIndicator 로 변환 해서 받아오기
- 받아온 HashMap에서 value 값인 Json 객체를 gsonConvert에 넣어서 gson 객체 뽑아 내기
- Gson 객체 서치 혹은 다른 필요한 곳에 사용하기
//TODO GetFireBase function
fun getFirebaseDatabase(serch : String){
mPostReference = FirebaseDatabase.getInstance().reference
mPostReference.addValueEventListener(object:ValueEventListener{
override fun onDataChange(db: DataSnapshot) {
txt1.text = db.value.toString() //same of getValue
txt2.text = db.getValue().toString()
txt3.text = db.child(ed1.text.toString()).getValue().toString() //원하는 영역 전체 불러오기
//검색한 key값에 해당하는 value값 보여주기
try {
var gs = mutableListOf<Person>()
var ts = db.child(ed1.text.toString()).getValue(t) //1. json객체 받아오기
//2. json value값 뽑아서 gsonConvert에 넣어서 gson파일 뽑기
ts?.forEach {
gs = gsonConvert.gsGet(it.value.toString())
Log.d(TAG, it.value.toString()) //gson 출력해 보기
}
gs.forEach({
println(it.toString())
txt4.text = it.toString()
})
}catch (e: Exception){
e.printStackTrace()
}
}
override fun onCancelled(db: DatabaseError) {
}
})
}
코드 공유
https://github.com/rain2002kr/MyFireBase.git
'안드로이드 프로그래밍[Kotiln Code] > Google firebase' 카테고리의 다른 글
Google firebase 구글 파이어베이스 app 연동 (0) | 2020.02.05 |
---|