我正在尝试使用通过Firebase连接的对等方获取的数据来更新我的Android应用中的WebVIEw部分.为此,执行将返回所需数据的阻塞 *** 作可能会有所帮助.例如,Chat示例的实现将等待另一个聊天参与者在push.setValue()返回之前写入某些内容.
Firebase可以实现这样的行为吗?
解决方法:
在常规JVM上,您可以使用常规Java同步原语执行此 *** 作.
例如:
// create a java.util.concurrent.Semaphore with 0 initial permitsfinal Semaphore semaphore = new Semaphore(0);// attach a value Listener to a Firebase referenceref.addValueEventListener(new ValueEventListener() { // onDataChange will execute when the current value loaded and whenever it changes @OverrIDe public voID onDataChange(DataSnapshot dataSnapshot) { // Todo: do whatever you need to do with the dataSnapshot // tell the caller that we're done semaphore.release(); } @OverrIDe public voID onCancelled(FirebaseError firebaseError) { }});// wait until the onDataChange callback has released the semaphoresemaphore.acquire();// send our response messageref.push().setValue("Oh really? Here is what I think of that");
但这不适用于AndroID.这是一件好事,因为在影响用户界面的任何事物中使用这种类型的阻塞方法是个坏主意.我有这个代码的唯一原因是因为我需要进行单元测试.
在真实的面向用户的代码中,您应该采用事件驱动的方法.因此,不是“等待数据来然后发送我的消息”,而是“当数据进入时,发送我的消息”:
// attach a value Listener to a Firebase referenceref.addValueEventListener(new ValueEventListener() { // onDataChange will execute when the current value loaded and whenever it changes @OverrIDe public voID onDataChange(DataSnapshot dataSnapshot) { // Todo: do whatever you need to do with the dataSnapshot // send our response message ref.push().setValue("Oh really? Here is what I think of that!"); } @OverrIDe public voID onCancelled(FirebaseError firebaseError) { }});
最终结果完全相同,但此代码不需要同步,也不会在AndroID上阻止.
总结以上是内存溢出为你收集整理的android – 是否可以从Firebase同步加载数据?全部内容,希望文章能够帮你解决android – 是否可以从Firebase同步加载数据?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)