Ich versuche, Daten von Firebase über Java zu lesen. Die addListenerForSingleValueEvent
und alles, was ich hineinlege, wird nicht ausgeführt. Nachdem ich andere verwandte Stack-Fragen durchsucht habe, konnte ich keine Antwort finden, die nicht mit Android zusammenhängt. Bitte werfen Sie einen Blick und lassen Sie mich wissen, warum diese Methode nicht ausgeführt wird. Danke im Voraus.addListenerForSingleValueEvent führt nicht
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.io.*;
public class App {
public static void main(String[] args) {
class ServiceFile {
private FileInputStream mMyFile;
public ServiceFile(String myFile) {
try {
mMyFile = new FileInputStream(myFile);
System.out.println("The Service File exists. "); // this line prints
} catch (FileNotFoundException ex) {
System.out.println("The Service File does not exist.");
}
}
public FileInputStream getMyFile() {
return mMyFile;
}
}
ServiceFile serviceFile = new ServiceFile("/Users/xxxx/Documents/development/javaFire/serviceAccountKey.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(serviceFile.getMyFile())
.setDatabaseUrl("https://xxxx.firebaseio.com")
.build();
// Initialize the app
FirebaseApp myApp = FirebaseApp.initializeApp(options);
// Get the reference to some location within the DB
final FirebaseDatabase database = FirebaseDatabase.getInstance(myApp);
DatabaseReference ref = database.getReference("https://stackoverflow.com/users/john");
// Attach a listener to read the data at the DB reference
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot theData) {
System.out.println("Success! "); // this line does not print
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("Cancelled" + databaseError.getMessage()); // this line does not print
}
});
}
}
Meine Datenbank Regeln sind als solche:
{
"rules": {
".read": true,
".write": "auth != null"
}
}
in Firebase Meine Daten, bei /users.json
{
"john": {
"dob": "02/20/1980"
}
}
Dank Doug, Hinzufügen einer Wartezeit von 1 Sekunde erlaubte dem Programm, Daten vor dem Verlassen zu erhalten - und druckte den "Erfolg!" Botschaft. Haben Sie Strategien/Empfehlungen/Ressourcen, die andere Lösungen ansprechen? – caleb
Asynchrone Vorgänge in Firebase geben ein Task-Objekt zurück. Sie könnten lernen, diese zu benutzen. Ich habe eine ganze Blog-Serie über sie hier beginnend: https://firebase.googleblog.com/2016/09/become-a-firebase-taskmaster-part-1.html –