如何从Firebase中的表中同步获取所有行?
考虑下面的代码片段:
public ArrayList getList(GenericModel model) { ValueEventListener postListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { ArrayList genericModels = new ArrayList(); for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { GenericModel genericModel = postSnapshot.getValue(model.getClass()); genericModels.add(genericModel); } Collections.sort(genericModels, (o1, o2) -> o1.getDate().compareTo(o2.getDate())); return genericModels; } @Override public void onCancelled(DatabaseError databaseError) { return null; } }; mDatabase.child(model.getTableName()).child(mUser.getUid()).addListenerForSingleValueEvent(postListener); }
现在这个代码不起作用,我只能通过回调来解决这个问题。 我不想这样 我想要一个方法返回一个ArrayList。 我怎么能重写这个? 使用Kotlin也是一个选择。
public Task> getList(GenericModel model) { if (!mIsInitialized) { initialize(); } final TaskCompletionSource> tcs = new TaskCompletionSource<>(); if (mIsInitialized) { ValueEventListener postListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { ArrayList genericModels = new ArrayList<>(); for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { GenericModel genericModel = postSnapshot.getValue(model.getClass()); genericModels.add(genericModel); } Collections.sort(genericModels, (o1, o2) -> o1.getDate().compareTo(o2.getDate())); tcs.setResult(genericModels); } @Override public void onCancelled(DatabaseError databaseError) { tcs.setResult(null); } }; mDatabase.child(model.getTableName()).child(mUser.getUid()).addListenerForSingleValueEvent(postListener); } return tcs.getTask(); }
在这里的调用方法:(科特林,与例程)
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) doAsync { val task = FirebaseManager.getInstance().getList(FixedCosts()) task.addOnCompleteListener { uiThread { if (task.result != null) { //show the result in UI } } } }
在这段代码中,我正在检索该节点中可用的所有行:
//全局variables\ ArrayList arrayListEventName = new ArrayList();
public ArrayListgetEventNames() { progressDialog(); //----Shared Preference----\\ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); String emailId = prefs.getString(StaticValues.PREF_EMAIL, "name@provider,com"); emailId = emailId.replace(".", ","); //--------------\\ database = FirebaseDatabase.getInstance(); // Database Instance \\ DatabaseReference databaseReference_users = database.getReference("admin").child(emailId) .child("eventsCreated"); databaseReference_users.addValueEventListener(new com.google.firebase.database.ValueEventListener() { @Override public void onDataChange(final com.google.firebase.database.DataSnapshot dataSnapshot) { arrayListEventName.clear(); for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { String eventName = (String) postSnapshot.child("eventName").getValue(String.class).toLowerCase(); // if(eventName.equals(eventName2)){ // // } arrayListEventName.add(eventName); } dismissDialog(); } @Override public void onCancelled(DatabaseError databaseError) { } });
返回arrayListEventName;
}
截图:
- 如何将Firebase中的文本文件读取到Android应用程序
- OneSignal:onNotificationProcessing在一段时间后不会被调用
- 有没有办法将后端(Kotlin)服务器应用程序部署到Firebase?
- Firebase的数据类空构造函数
- FirebaseDatabase根引用在事务中为空
- Google Firebase在Android应用中注销并忘记用户
- 如何从Firebase数据库检索数据并将其存储在ListArray <Class>中? – Kotlin
- 使用RxJava加入来自Firebase实时数据库的扁平化数据
- 地图在Firebase onDataChange在Kotlin