안드로이드 프로그래밍[Kotiln Code]/Google firebase

구글 파이어베이스 : GsonConvert class 객체를 이용한 데이터 추가, 검색 기능

훈츠 2020. 2. 10. 17:02
반응형

안녕하세요. 훈츠 입니다. 오늘은 구글 파이어베이스에 GsonConvert class 객체를 적용해 json 파일로, 변환하고 json파일을 gson 객체로 변환하는 방법에 대해 포스팅 해봅니다. 객체 설명은 다음 포스팅을 읽으시면 도움이 될것 같습니다. 

https://rain2002kr.tistory.com/53?category=374708

 

[kotlin] Gson & Json 저장 할수 있는 class 만들어 보기

안녕하세요. 훈츠 입니다. 모두 즐겁게 공부하면서 안드로이드 앱 학습하고 계신가요? 오늘은 Gson 클래스 객체를 Json 객체로 만들고, 다시 Json 객체를 Gson 객체로 만들수 있는 클래스를 설명 드려보고자 합니..

rain2002kr.tistory.com

그리고 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 에 데이터 추가 하기 전 순서

  1. Person(name, number) 를 gsonConvert에 put 하기 
  2. gsonConvert에서 json 객체 받아오기 
  3. hashMap 에 json 객체 추가하기 
  4. 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 에 데이터 받아 오기 

  1. Json type 을 GenericTypeIndicator 로 변환 해서 받아오기 
  2. 받아온 HashMap에서 value 값인 Json 객체를  gsonConvert에 넣어서 gson 객체 뽑아 내기 
  3. 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

 

rain2002kr/MyFireBase

Contribute to rain2002kr/MyFireBase development by creating an account on GitHub.

github.com

 

반응형