0
firebaseデータベースのキーをある値に設定する単純なアプリケーションを構築したいと思います。それは非同期なので、CountDownLatch
を作成して完了するのを待ちますが、完了することはありません。Firebase Java SDKが設定後に終了できないのはなぜですか?
package me.ibrohim.adler;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseCredentials;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.tasks.OnCompleteListener;
import com.google.firebase.tasks.Task;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.function.Consumer;
public class Main {
public static void main(String [] args) throws InterruptedException {
FileInputStream serviceAccount = null;
try {
serviceAccount = new FileInputStream("/home/ibrohim/.adler/adminsdk.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://[my app].firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (serviceAccount != null) try {
serviceAccount.close();
} catch (IOException e) {
e.printStackTrace();
}
}
CountDownLatch done = new CountDownLatch(1);
// new Thread(() -> {
// try {
// Thread.sleep(1000);
// done.countDown();
// }
// catch (Exception e){
// System.err.println(e);
// }
// }).start();
FirebaseDatabase
.getInstance()
.getReference("[some path]")
.setValue("[some value]")
.addOnCompleteListener(task -> done.countDown());
done.await();
}
}
はい、それはsetValueに達し、データベースのmy値が変更されました。プログラムは決して止まらない。ここに私のスタックトレースです:https://pastebin.com/SVy1GNsD – ibrohimislam
そしてこれらのバージョンを使用してください:https://pastebin.com/cTGfY0rj – ibrohimislam
私は何が起こっているのかは分かりません。 'done.await()'の後に 'System.out.println()'を置くと、それは実行されますか? –