반응형

안드로이드 스튜디오 Firebase Firestore 코틀린으로 초간단 실시간 읽고 쓰기 예제

 

안드로이드에서 Firebase Firestore 역시 사용법을 알면 쉽지만,

멀티 게임 등을 만들기 위해 처음 접하게 되면 굉장히 난해 합니다.

그래서 기본 사용법 만을 이해할수 있도록

실시간 읽고 쓰기  초간단 예제 및 설명입니다.

 

*참고 용

Firebase 설정 법을 모르면 아래를 참고하세요

안드로이드 스튜디오 + 파이어 베이스 firebase 설정, 연결하기
https://dxkor2.tistory.com/318

 

안드로이드 스튜디오 Firebase Firestore 코틀린으로 초간단 읽고 쓰기 예제
https://dxkor2.tistory.com/319


파이어 베이스 콘솔

https://console.firebase.google.com/

 

Firebase , Clould Firestore에서 위처럼 

player - test@gmail.com - xloc (number) 순서로 만들어 줍니다.

 

목표는 xloc에 값을 실시간으로 쓰고 그것을 읽는 게 목표입니다.


TextView를 하나 만듭니다.

 

activity_main.xml  소스에서 추가해서

숫자가 잘 보이게 text를 좀 크게 해줍니다.

android:textSize="32sp"
 


실시간 파이어 베이스 읽고 쓰기 코틀린 예제
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.firestore.DocumentSnapshot
import com.google.firebase.firestore.EventListener
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import kotlin.concurrent.timer
 
class MainActivity : AppCompatActivity() {
  
  val fbdb = Firebase.firestore //파이어베이스.파이어스토어 설정
  
  var oSysMainLoop = 0   //타임어 쓰레드 0=시작 조차 않음. 1=실행중, 2= 실행 후 종료했음
  
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  
    val textv1=findViewById<TextView>(R.id.textView)
 
    //-----------------------------------------------------------------------
    //xloc 값이 변경되면 xloc 값을 읽어서 읽어서 textview에 그리는 부분
    //-----------------------------------------------------------------------
    val adocRef = fbdb.collection("player").document("test@gmail.com")
  
    adocRef.addSnapshotListener(EventListener<DocumentSnapshot> { snapshot, e ->
      if (snapshot != null && snapshot.exists()) {
        textv1.text = snapshot.data!!["xloc"].toString()
      }
    })
    
    //-----------------------------------------------------------------------
    //타임어로 xloc 값을 일정 주기로 계속 바꾸어 쓰는 부분
    //-----------------------------------------------------------------------
    if (oSysMainLoop == 0) { //타임어 쓰레드를 실행한 적이 없다면
    
      oSysMainLoop = 1 //타임어 쓰레드 실행
    
      timer(period = 1500, initialDelay = 1000//1.5초(1500) 주기마다 호출,처음 시작시 딜러이 1초
      {
        if (oSysMainLoop != 1) {
          cancel()
        }
      
        val axloc = hashMapOf("xloc" to (0..100).random()) //0..100 랜덤 발생시켜 쓰기
        fbdb.collection("player").document("test@gmail.com").set(axloc)
          .addOnSuccessListener { //쓰기 성공했을 경우
          }
          .addOnFailureListener() { //쓰기 실패 했을 경우
          }
      }
    
      
    }
  } //create
//MainActivity
 
 

만일 여러개의 필드가 있을경우  
필드 중 하나만 변경하기
fbdb.collection("player").document("test@gmail.com").update("xloc",(0..100).random())
 

궁굼한게 있다면 공식 문서를 참고 하세요
https://firebase.google.cn/docs/firestore/query-data/get-data?hl=ko#kotlin+ktx_5


나중에 소스를 테스트 했을때 연결이나 모든 설정은 제대로 됐는데
읽고 쓰기가 않 되서 고생 했습니다.
파이어 베이스 프로젝트가 바꼈을 경우
전의 프로젝트 이름을 찾아서 다시
새 프로젝트 이름으로 바꾸어 주니까 잘 됐습니다.
values.xml 에 프로젝트 이름이 설정되어 있습니다.
경로)
MyApplication\app\build\generated\res\google-services\dev\debug\values\values.xml

반응형

+ Recent posts