Android: 使用 Room 和 Firestore?
创始人
2024-10-05 10:30:25
0

在Android中,可以使用Room和Firestore来进行数据存储和同步。Room是一个SQLite对象映射库,用于本地数据库存储,而Firestore是Google提供的云存储解决方案。

首先,确保在项目的build.gradle文件中添加以下依赖项:

dependencies {
    // Room
    implementation "androidx.room:room-runtime:2.4.0"
    kapt "androidx.room:room-compiler:2.4.0"

    // Firestore
    implementation 'com.google.firebase:firebase-firestore:24.0.0'
}

接下来,创建一个Room数据库:

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao

    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "my_database"
                ).build()
                INSTANCE = instance
                instance
            }
        }
    }
}

然后,创建一个Room实体类和DAO(数据访问对象):

@Entity
data class User(
    @PrimaryKey val id: String,
    val name: String,
    val age: Int
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAllUsers(): LiveData>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertUser(user: User)

    @Delete
    suspend fun deleteUser(user: User)
}

接下来,创建一个FirestoreHelper类,用于处理与Firestore的交互:

class FirestoreHelper {
    private val db = FirebaseFirestore.getInstance()

    fun addUser(user: User) {
        val userMap = hashMapOf(
            "id" to user.id,
            "name" to user.name,
            "age" to user.age
        )

        db.collection("users")
            .document(user.id)
            .set(userMap)
            .addOnSuccessListener { Log.d(TAG, "User added to Firestore") }
            .addOnFailureListener { e -> Log.w(TAG, "Error adding user", e) }
    }

    fun deleteUser(user: User) {
        db.collection("users")
            .document(user.id)
            .delete()
            .addOnSuccessListener { Log.d(TAG, "User deleted from Firestore") }
            .addOnFailureListener { e -> Log.w(TAG, "Error deleting user", e) }
    }

    fun getAllUsers(listener: (List) -> Unit) {
        db.collection("users")
            .get()
            .addOnSuccessListener { result ->
                val userList = ArrayList()
                for (document in result) {
                    val id = document.getString("id") ?: ""
                    val name = document.getString("name") ?: ""
                    val age = document.getLong("age")?.toInt() ?: 0
                    userList.add(User(id, name, age))
                }
                listener(userList)
            }
            .addOnFailureListener { e -> Log.w(TAG, "Error getting users", e) }
    }

    companion object {
        private const val TAG = "FirestoreHelper"
    }
}

最后,在你的Activity或Fragment中,使用Room和Firestore进行数据存储和同步:

class MainActivity : AppCompatActivity() {
    private lateinit var db: AppDatabase
    private lateinit var userDao: UserDao
    private lateinit var firestoreHelper: FirestoreHelper

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

        db = AppDatabase.getInstance(applicationContext)
        userDao = db.userDao()
        firestoreHelper = FirestoreHelper()

        val usersLiveData = userDao.getAllUsers()
        usersLiveData.observe(this, { users ->
            // 更新UI显示用户列表
            Log.d(TAG, "Users: $users")
        })

        val user = User("1", "John Doe", 25)

        // 添加用户到Room数据库
        GlobalScope.launch {
            userDao.insertUser(user)
        }

        // 添加用户到Firestore
        firestoreHelper.addUser(user)

        // 从Firestore获取所有用户
        firestoreHelper.getAllUsers { userList ->
            // 将所有用户添加到Room数据库
            GlobalScope.launch {
                for (user in userList) {
                    userDao.insertUser(user)
                }
            }
        }

        // 删除用户
        GlobalScope.launch {
            userDao.deleteUser(user)
            firestoreHelper.deleteUser(user)
        }
    }

    companion object {

相关内容

热门资讯

十分钟外挂!科乐填坑辅助器怎么... 十分钟外挂!科乐填坑辅助器怎么用,温州茶园辅助软件,力荐教程(有挂方法)-哔哩哔哩科乐填坑辅助器怎么...
第六分钟总结!雅苑蕲春辅助,创... 第六分钟总结!雅苑蕲春辅助,创思维激k辅助器免费(一直是有挂)-哔哩哔哩1、游戏颠覆性的策略玩法,独...
第3分钟外挂!jj斗地主麻将外... 第3分钟外挂!jj斗地主麻将外g挂,闲逸辅助插件,安装教程(竟然有挂)-哔哩哔哩1、任何jj斗地主麻...
八分钟必备!边锋干瞪眼辅助器,... 八分钟必备!边锋干瞪眼辅助器,友友联盟辅助脚本(原来有挂)-哔哩哔哩1、玩家可以在友友联盟辅助脚本软...
第三分钟外挂!人人燕赵挂,爱玩... 第三分钟外挂!人人燕赵挂,爱玩联盟辅助软件,大神讲解(的确有挂)-哔哩哔哩1)爱玩联盟辅助软件辅助挂...
第六分钟推荐!越乡游义乌辅助器... 第六分钟推荐!越乡游义乌辅助器微信,蜀山四川智能辅助插件(原来有挂)-哔哩哔哩所有人都在同一条线上,...
九分钟外挂!闲逸辅助脚本,哥哥... 九分钟外挂!闲逸辅助脚本,哥哥打大a游戏攻略,必胜教程(有人有挂)-哔哩哔哩1、下载好哥哥打大a游戏...
1分钟了解!花花生活圈脚本,开... 1分钟了解!花花生活圈脚本,开心泉州辅助(一直是真的挂)-哔哩哔哩1、花花生活圈脚本系统规律教程、花...
十分钟外挂!福建天天开心黑科技... 十分钟外挂!福建天天开心黑科技,胡乐辅助脚本,揭秘教程(有挂教学)-哔哩哔哩1、操作简单,无需注册,...
第十分钟揭露!闲逸透视app为... 第十分钟揭露!闲逸透视app为什么免费,四川家园辅助器(原来真的是有挂)-哔哩哔哩1、进入到闲逸透视...