[英]How can Retrieve data in ListView from Firebase
你能帮我解决这个问题吗,我尝试在 Listview 中显示 firebase 中的数据,但不显示任何内容!
ListView listView;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
ArrayList<String> arrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fairbase_list);
firebaseDatabase=FirebaseDatabase.getInstance();
databaseReference= firebaseDatabase.getReference("Users");
listView=(ListView) findViewById(R.id.list);
final ArrayAdapter<String> arrayAdapter= new ArrayAdapter<String>(this ,android.R.layout.simple_list_item_1,arrayList);
listView.setAdapter(arrayAdapter);
Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show();
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value=dataSnapshot.getValue(String.class);
arrayList.add(value);
arrayAdapter.notifyDataSetChanged();
}
}
public class MainActivity extends AppCompatActivity{
ListView listView;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
ArrayList<String> arrayList = new ArrayList<>();
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Users");
listView = (ListView) findViewById(R.id.lists);
Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show();
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value=dataSnapshot.getValue(String.class);
arrayList.add(value);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
listView.setAdapter(arrayAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}}
这个监听器实际上是用于列表的,所以它不是来自监听器。 此外,由于用户未通过身份验证,您需要将数据库中的规则更改为:-
{
"rules": {
".read": "true",
".write": "true"
}
}
因为您使用了错误的侦听器。如果您想连续侦听更改并且只需要侦听一次,则应该使用addValueEventListener ()
,您可以使用addListenerForSingleValueEvent()
ValueEventListner 示例
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Post post = dataSnapshot.getValue(Post.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
};
mPostReference.addValueEventListener(postListener);
PostDetailActivity.java
有关更多信息,您可以在GitHub 上查看此 firebase 示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.