当前位置: 首页 > 知识库问答 >
问题:

如何在jetpack compose中从Firestore传递查询参数

孔嘉茂
2023-03-14

我的项目中有一个查询来检索游戏列表并将其显示在LazyColumn中。当我查询整个集合时,它可以正常工作,但我想在片段中放一个wherite子句,它需要2个参数,我必须在片段中传递,但我不知道如何用Jetpack compose传递它。

下面是已经到位并正在工作的查询:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    @Named("queryGame")
    fun provideGetAllGames(): Query =
        FirebaseFirestore.getInstance()
                .collection(GAMES)
}
@Singleton
class PlayersRepository @Inject constructor(  
    private val queryGame: Query,
) {
 fun getPlayerFromFirestore(): DataOrException<Task<DocumentSnapshot>, Exception> {
        val dataOrException = DataOrException<Task<DocumentSnapshot>, Exception>()
        try {
            dataOrException.data = getUser.get()
        } catch (e: FirebaseFirestoreException) {
            dataOrException.e = e
        }
        return dataOrException
    }
@HiltViewModel
class GamesViewModel @Inject constructor(
    private val repository: PlayersRepository
): ViewModel() {
 val data: MutableState<DataOrException<List<Game>, Exception>> = mutableStateOf(
        DataOrException(
            listOf(),
            Exception("")
        )
    )

    init{
       getAllGames()
    }

   fun getAllGames() {
        viewModelScope.launch {
            data.value = repository.getAllGames()
        }
    }
@AndroidEntryPoint
class GameFragment : Fragment() {

    private val viewModel: GamesViewModel by viewModels()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
     return ComposeView(requireContext()).apply {
            setContent {
                      val games = viewModel.data.value.data
LazyColumn{
           items(games!!){ game ->
            GameResults(game)
    }
 }

我需要在appModule中添加.where(PLAYERS,listOf(user1+“”+user2,user2+“”+user1)),但我不知道如何在片段上传递user1和user2。我怎样才能做到这一点呢?

共有1个答案

田阳泽
2023-03-14

我需要在appModule中添加.where(PLAYERS,listOf(user1+“”+user2,user2+“”+user1))

不能将动态数据传递到AppModule文件中。因此,要使用查询对象从Firestore获取数据,需要在repository类中添加.wherate()调用。看到您已经将“QueryGame”对象(实际上是一个CollectionReference对象)注入到您的repository类中,您可以使用以下一行代码:

dataOrException.data = queryGame.whereIn(PLAYERS, listOf(user1 + "" + user2, user2 + "" + user1)).get()

不要忘记在使用此查询的方法中同时传递“user1”和“user2”对象。

 类似资料:
  • 问题内容: 在我的HQL查询下方找到 该查询工作正常,但是在此情况下,我想传递userId的值,但无法弄清楚该怎么做。请帮助..!提前致谢..!! 问题答案: 我很简单地将参数添加到HQL __ 在这里,我有硬编码15您可以简单地使用变量代替它

  • 我有一个服务类,它通过使用< code > carrepository . retrieve cars()调用JPA存储库来接收汽车列表。存储库方法使用本地查询来检索记录。 现在我想传递参数< code > carrepository . retrieve cars(Long vinNo,Long serialNo)并在查询中使用它们。我假设我会需要一些东西作为准备好的陈述。然而,我不知道如何实现

  • 问题内容: 我正在尝试为我的应用程序编写查询,但是遇到了一些麻烦。我需要将数据库的一个字段作为参数传递,例如: 因为WHERE子句和ORDER BY子句是动态的,所以用户可以选择。 使用它没有用。 问题答案: JasperReports中 有两个用于参数引用的语法表达式: 和和 。 $ P {paramName}语法 主要用于设置 WHERE 输入参数值。替换算法是“智能”的,其实现使用java.

  • 我正在尝试将FirebaseFirestore用户Uid传递给Stripe/firestore云函数。 所以我会有一个如下的https查询: https://connect.stripe.com/express/oauth/authorize?response_type=code 这是我的功能

  • 问题内容: 我试图找出将自定义数据传递给查询调用以使其在回调中可用的正确方法。我在nodejs(所有最新版本)中使用MySQL库。 我打电话给connection.query(sql,function(err,result){…}); 我找不到办法1)将自定义数据/参数传递给调用,以便2)在调用回调时可以使它可用。那么正确的做法是什么? 我有以下(伪代码): 从上面的代码,我需要能够将查询中使用的

  • 我写了一个代码来管理一个咖啡馆,所以在框架中我添加了一个JTable,每次我从JComboBox中选择一个项目,它都应该显示在JTable中。为此,我添加了一个按钮,对于它的操作,我确保每次单击它时,它都将从JComboBox中单击的项存储在数据库中,然后将从数据库中获取的项存储在JTable中。但问题是JTable有两列,而JComboBox中的选择只有一列。因此,另一列必须从其他数据库调用,这