如何从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;
}
截图:
- 如何创建需要find目标文档的Firestore事务
- Firebase Perf不会运行测试应用程序:transformClassesWithFirebasePerformancePluginForDebugAndroidTest
- 将Firebase中的数据加载到ExpandableList
- Firestore安全规则基于地图值
- Kotlin:不能使用GenericTypeIndicator调用Firebase数据库的getValue
- 如何处理iOS中的Firebase数据库错误? #AskFirebase
- 如何更改Kotlin属性的名称以匹配Firebase数据库上的字段
- Kotlin类没有从firebase获取它的布尔值
- OneSignal:onNotificationProcessing在一段时间后不会被调用