【问题标题】:ListView onClick to get Firebase dataListView onClick 获取 Firebase 数据
【发布时间】:2018-04-09 19:52:33
【问题描述】:

我设法从 Firebase 数据库中获取数据并在我的 ListView 中按字母顺序显示。

现在我想显示我的数据库中的值,如果我单击 ListView 中的一个项目。作为我的数据库中的示例,它以“BB”作为名称,值为“Bye,bye”。

因此,在 ListView 中的 onClick 事件之后,Toast 消息应该显示该值。我该怎么做?

这是我的数据库:

【问题讨论】:

    标签: java android firebase listview firebase-realtime-database


    【解决方案1】:

    点击项目后显示值:

    DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                final String selectedFromList = (String) list.getItemAtPosition(position);
    
                ref.orderByChild(selectedFromList).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                     String retrievedValue=dataSnapshot.child(selectedFromList).getValue().toString();
                     Toast.makeText(activity_name.this, "Value: "+retrievedValue, Toast.LENGTH_LONG).show();
    
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
    
                    }
                });
    

    假设您有一个包含以下内容的列表视图:

    Afk
    MFG
    

    单击一个项目后,获取该位置的项目并在查询orderByChild 中使用它并检索它的值。

    【讨论】:

    • 你好,我在我的应用程序中使用了你的代码,但没有出现任何错误,应用程序崩溃了。为什么?您可以在顶部的图片中看到错误。
    • 列表视图中有什么?
    • 我上传了一张它的照片。如您所见,我在数据库中编辑了数据,Toast 应显示的数据在左侧,列表视图的数据在右侧。是这个问题吗?
    • 尝试ref.orderByChild("Bye, bye").equalTo(selectedFromList)并点击BB
    • 您需要将数据库更改为具有相同的关键示例name: BBname:XOXO,然后您只需执行orderByChild("name").equalTo(selectedFromList)。更改数据库并使用 randomids 也使用 push()
    【解决方案2】:

    in his answer 提供的示例代码“Peter Haddad”基本上可以正常工作...如果您以更好的方式设计数据库,我当时就这样做了。
    如果你使用他的代码,你会得到数据库条目的值(所以右边的文本在console数据库中,但我想得到左边的。


    我建议使用Firebase Docs about Structuring 中的结构。
    它可能看起来像这样:

    这里有两篇关于搜索和查询这类数据库的文章:


    如果你还是想按照我尝试的方式来做,有可能:

    在“Peter Haddad”的示例代码中,只需将 dataSnapshot.child(selectedFromList).getValue().toString() 替换为 dataSnapshot.child(selectedFromList).getKey().toString()

    键代表控制台数据库结构左侧的文本。

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 2020-09-04
      • 2017-10-30
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多