我正在做一个Android应用程序。我已成功写入Firebase,但是我在从Firebase读取到ListView时遇到问题。如果有人可以协助将数据读回到应用程序中的ListView,如果我只有一个项目尝试并回读它,如果我尝试获取应用程序失败的所有三个项目。 我已经包含了数据库的图片,以了解结构和我的代码。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
public class Admin_ViewEvent extends AppCompatActivity {
// private TextView textViewPersons;
private ListView mListView;
private ArrayList<String> mMeetings = new ArrayList<>();
private Firebase mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin__view_event);
mRef = new Firebase("https://saica-sgb-77a4f.firebaseio.com/Meetings");
mListView = (ListView) findViewById(R.id.ListView);
//textViewPersons = (TextView) findViewById(R.id.textViewPersons);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMeetings);
mListView.setAdapter(arrayAdapter);
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for(DataSnapshot childSnapShot : dataSnapshot.getChildren()) {
String date = (String) childSnapShot.child("address").getValue();
String datetime = (String) childSnapShot.child("datetime").getValue();
String name = (String) childSnapShot.child("name").getValue();
mMeetings.add(date);
mMeetings.add(datetime);
mMeetings.add(name);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
}
答案 0 :(得分:1)
您可以使用Firebase UI library。
只需添加依赖项:
dependencies {
// FirebaseUI Database only
compile 'com.firebaseui:firebase-ui-database:1.0.1'
}
然后定义一个简单的类来映射你的对象:
public class MyObject {
private String name;
private String address;
private String dateTime;
public MyObject() {
}
....
}
然后使用类似的东西:
mRef = new Firebase("https://saica-sgb-77a4f.firebaseio.com/Meetings");
mListView = (ListView) findViewById(R.id.ListView);
mAdapter = new FirebaseListAdapter<MyObject>(this, MyObject.class, R.layout.myLayout, mRef) {
@Override
protected void populateView(View view, MyObject myObj, int position) {
//Set the value for the views
((TextView)view.findViewById(R.id.xxx)).setText(myObj.getName());
//...
}
};
mListView.setAdapter(mAdapter);
答案 1 :(得分:1)
使用ChildEventListener并输入您的代码:
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String(this,android.R.layout.simple_list_item_1, mMeetings);
mListView.setAdapter(arrayAdapter);
在onChildAdded ....内
还创建Model类以从firebase获取数据
public class User {public String name; public String date; public String time; //对// DataSnapshot.getValue(User.class)
public User() {}public User(String name, String time, String date) {this.name = name;
this.time= time;this.date=date;}
的调用所需的默认构造函数
谢谢它会帮助你..
答案 2 :(得分:0)
我觉得你错过了什么,你应该加上这个
DatabaseReference myRef = FirebaseAuth.getInstance().getReference
.child("Meetings").child(uid);
然后在onDataChange。
String date = (String) childSnapShot.child("address").getValue();
String datetime = (String) childSnapShot.child("datetime").getValue();
String name = (String) childSnapShot.child("name").getValue();
mMeetings.add(date);
mMeetings.add(datetime);
mMeetings.add(name);