Firebase 将数据返回到列表视图

Posted

技术标签:

【中文标题】Firebase 将数据返回到列表视图【英文标题】:Firebase return data to listview 【发布时间】:2017-09-13 05:00:39 【问题描述】:

在问这里之前,我尝试遵循一些教程,但是当尝试根据其他人的教程进行重现时,出现了字符串错误的哈希图之类的问题。

我的疑惑如下:

我在下面做的方式可以从Firebase获取值,但我只想获取“食物”(肉,鸡,..)里面的信息,如果它很好的话,没有信息或不。以及如何列出项目而不是将它们放在一起。 谢谢

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Map;

public class MainActivity extends AppCompatActivity 


    DatabaseReference dref;
    ListView listview;
    ArrayList < String > list = new ArrayList < > ();
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = (ListView) findViewById(R.id.listview);

        final ArrayAdapter < String > adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, list);

        dref = FirebaseDatabase.getInstance().getReference();

        dref.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 


                String teste = dataSnapshot.child("Restarant").child("foods").getValue().toString();

                adapter.add(teste);
                listview.setAdapter(adapter);
                adapter.notifyDataSetChanged();



            

            @Override
            public void onCancelled(DatabaseError databaseError) 

            
        );



    

【问题讨论】:

你能澄清一下到底是什么不起作用吗?你在尝试什么,你的预期输出是什么?实际输出?谢谢 我想获取foods里面的数据,但是只取(meat,pork, chicken)没有状态,目前是这样的:chicken = good, pig=amazing, meat = good它显示每个人都在同一条线上。我希望是:-pork -chicken -Meat 【参考方案1】:

试试这个

 public class MainActivity extends AppCompatActivity 


 DatabaseReference dref;
 ListView listview;
 ArrayList<String> list=new ArrayList<>();
 @Override
 protected void onCreate(Bundle savedInstanceState) 
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   listview=(ListView)findViewById(R.id.listview);

   final ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);

   dref=FirebaseDatabase.getInstance().getReference().child("Restarant");

   dref.child("foods").addValueEventListener(new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 


       list.add(dataSnapshot.child("chicken").getValue(String.class));
       list.add(dataSnapshot.child("meat").getValue(String.class));
       list.add(dataSnapshot.child("pork").getValue(String.class));


        listview.setAdapter(adapter);
        adapter.notifyDataSetChanged();



    

    @Override
    public void onCancelled(DatabaseError databaseError) 

    
);


【讨论】:

我试过这个但不起作用:04-17 21:46:04.106 10096-10096/cai.com.fireteste E/AndroidRuntime: FATAL EXCEPTION: main Process: cai.com.fireteste, PID: 10096 java.lang.NullPointerException:尝试在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:409) 的空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()” .view.Choreographer.doCallbacks(Choreographer.java:686) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)... 你删除了数据库吗? 不,数据库保持活动状态并且内部名称相同。 修复了餐厅的小错字 我做了一个测试: public void onChildAdded(DataSnapshot dataSnapshot, String s) String value = (dataSnapshot.child("Restarant").getValue(String.class)); list.add(value.toString());适配器.notifyDataSetChanged();和错误更改...现在是致命异常:mainProcess:cai.com.fireteste,PID:14802 com.google.firebase.database.DatabaseException:无法将 java.util.HashMap 类型的值转换为字符串

以上是关于Firebase 将数据返回到列表视图的主要内容,如果未能解决你的问题,请参考以下文章

扑动 Firebase 动画列表视图如何将数据传递到详细信息屏幕

访问使用列表框中选择的项目更新子表单

从视图表中获取数据时出现 Laravel 错误

如何从firebase检索多个数据到android中的列表视图?

我如何从firebase检索数据到android listview顶部[重复]

如何将图表添加到 Firebase?