【发布时间】:2017-04-14 22:44:35
【问题描述】:
我正在做一个 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());
}
});
}
}
【问题讨论】:
-
代码有什么问题?我很快看到的唯一一件事是你没有在
onDataChange()中调用arrayAdapter.notifyDataSetChanged()。我还建议使用ChildEventListener,因为这样可以更精细地更新列表视图,从而减少屏幕闪烁。 -
@FrankvanPuffelen 嗨,我希望将每个项目都放在自己的列表中,因为 Firebase 中的每个项目都成为自己的项目。例如,第一个键 3 个项目必须分组显示。
-
听起来像是一个清晰的用例。当前代码有什么问题?
标签: java android listview firebase firebase-realtime-database