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 动画列表视图如何将数据传递到详细信息屏幕
如何从firebase检索多个数据到android中的列表视图?