Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Python을 이용한 Firebase Realtime Database 생성 및 Android Studio를 통한 데이터 읽기

Billcorea 2024. 10. 31. 15:53
반응형

Python을 이용한 Firebase Realtime Database 생성  Android Studio를 통한 데이터 읽기

앱 개발자로 살아보기

안녕하세요! 오늘은 Python을 사용해 Excel 데이터를 Firebase Realtime Database에 업로드하고, Android Studio를 통해 해당 데이터를 읽어오는 방법을 소개하려고 합니다.  과정에서 발생할  있는 주요 오류와 대처 방안도 함께 살펴보겠습니다.

Python을 이용한 Firebase Realtime Database 생성

1. 라이브러리 설치

먼저 필요한 라이브러리를 설치합니다.

sh
pip install openpyxl firebase-admin

2. Firebase 초기화  Excel 파일 읽기

다음 코드를 작성하여 Excel 파일을 읽고 Firebase에 데이터를 업로드합니다.

python
import openpyxl
import firebase_admin
from firebase_admin import credentials, db

# Firebase 초기화
cred = credentials.Certificate("serviceAccountKey.json")
firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://your-database-name.firebaseio.com/'
})

# Excel 파일 읽기
workbook = openpyxl.load_workbook('your_excel_file.xlsx')
sheet = workbook.active

# 데이터 Firebase에 업로드
for row in sheet.iter_rows(min_row=2, values_only=True):  # 첫 번째 행은 헤더로 간주
    data = {
        'column1': row[0],
        'column2': row[1],
        # 필요한 만큼 추가
    }
    db.reference('path/to/your/data').push(data)

print("데이터가 성공적으로 Firebase에 저장되었습니다.")

Android Studio에서 Firebase 데이터 읽기

1. Gradle 설정

build.gradle 파일에 Firebase 의존성을 추가합니다.

gradle
dependencies {
    implementation 'com.google.firebase:firebase-database:20.0.4'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
}

2. ViewModel 정의  LiveData 설정

다음 코드를 작성하여 ViewModel에서 Firebase 데이터를 읽고 LiveData에 저장합니다.

kotlin
class MyViewModel : ViewModel() {
    private val database = FirebaseDatabase.getInstance().reference

    private val _data = MutableLiveData<List<Record>>()
    val data: LiveData<List<Record>> get() = _data

    init {
        fetchDataFromFirebase()
    }

    private fun fetchDataFromFirebase() {
        database.child("path/to/data").addChildEventListener(object : ChildEventListener {
            override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
                val recordList = _data.value?.toMutableList() ?: mutableListOf()
                val record = snapshot.getValue(Record::class.java)
                record?.let { recordList.add(it) }
                _data.value = recordList
            }
            override fun onCancelled(error: DatabaseError) {}
            override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {}
            override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {}
            override fun onChildRemoved(snapshot: DataSnapshot) {}
        })
    }
}

3. Activity에서 LiveData 관찰

Activity에서 ViewModel과 LiveData를 관찰하여 UI를 업데이트합니다.

kotlin
class MainActivity : AppCompatActivity() {
    private val myViewModel: MyViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        myViewModel.data.observe(this, Observer { recordList ->
            // UI 업데이트
            for (record in recordList) {
                println("Field1: ${record.field1}")
                println("Field2: ${record.field2}")
                println("Field3: ${record.field3}")
                println("Field4: ${record.field4}")
                println("Field5: ${record.field5}")
                println("Field6: ${record.field6}")
            }
        })
    }
}

오류  대처 방안

  1. Firebase Realtime Database 연결 강제 종료
    • 오류: Firebase Database connection was forcefully killed by the server.
    • 원인: 데이터베이스가 다른 지역에 위치.
    • 해결: 데이터베이스 URL을 올바르게 설정.
  2. Firebase 데이터 클래스  생성자 오류
    • 오류: Class does not define a no-argument constructor.
    • 해결: 데이터 클래스에  생성자 추가.
    • kotlin
      data class Record(
          val field1: String? = null,
          val field2: String? = null,
          // 필요한 필드 추가
      ) {
          constructor() : this(null, null, null, null, null, null)
      }
      

이렇게 하면 Python과 Android Studio를 사용해 Firebase Realtime Database를 효과적으로 관리할  있습니다. 추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!

반응형