반응형

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

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

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

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


파이어 베이스 콘솔

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