我正在尝试将数据保存到Firebase RealtimeDatabase中。
保存的过程很好并且效果很好,但我很好奇我的想法:强制.setValue
操作进入同步结构。我知道,那种方式并不是最好的方式,但无论如何,我都想尝试一下。
所以我提出了这个代码:
Thread t1 = new Thread(){
public void run(){
try {
Tasks.await(databaseReference.child("someChild").setValue(someObject));
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("finished");
}
理论上,该代码段旨在首先设置数据库中的值,然后等待完成(通过Tasks.await()
),然后打印出**在那之后*线"完成"。
我将Tasks.await()
- 命令包装在第二个线程中,因为当我不知道时,我得到一个异常,其中的内容类似于"在主应用程序线程中不能调用Tasks.await()&# 34。
但是当我运行整个事情时,它只会卡在t1.join();
。
当我删除t1.join();
- 语句时,一切正常,但第二个线程(t1)在"完成" -output存在之前尚未完成。我知道为什么会这样,但我仍然对这个问题的解决方案感兴趣。