Android Code Snippet FirebaseRealtimeDatabase create Listener

(Google translate)
Create listener to receive data from FirebaseRealtimeDatabase every time it changes.


B4X:
'en pagina Main

Sub DatosRecibidos_Fire(Value As String)'recibe un string en formato json
    Dim parser As JSONParser
    parser.Initialize(Value)
    Dim RootFB As Map = parser.NextObject
    If RootFB = Null Or RootFB.IsInitialized = False Then
        'error
    Else
        'RootFB    ...........   
    End If       
End Sub


#If Java

import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;

import anywheresoftware.b4a.keywords.B4AApplication;
import android.content.pm.PackageManager.NameNotFoundException;


public static class MyFirebaseListener {

private String NombreEvento = "DatosRecibidos";//nombre del evento que recibira los datos en pagina Main (OJO NO en B4XPages.MainPage)
    
    // Enviar datos a B4A en mi caso Sub DatosRecibidos_Fire(Value As String) en pagina Main
    public void NotificarDatosCambiados(String txt) throws IOException {
           processBA.raiseEventFromUI(this, NombreEvento.toLowerCase(BA.cul) + "_fire", txt);//evento DatosRecibidos_Fire en pagina Main
    }

    FirebaseDatabase database = FirebaseDatabase.getInstance("https://tureferencia-xxxx.firebaseio.com/");//aqui tu referencia de RealtimeDatabase
    DatabaseReference myRef = FirebaseDatabase.getInstance().getReference();//en este caso leo todos los datos (puedes leer el nodo que quieras)


     public void IniciarListener() throws IOException {
      myRef.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        //String name = dataSnapshot.toString();//leer como string
        //BA.Log(name);//         
        try {
            Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue();//leer datos
            NotificarDatosCambiados(td.toString());//devolver datos a B4A
            } catch(Exception e) {
                BA.Log("ERROR");
            }//catch       
      }//onDataChange

      @Override
      public void onCancelled(DatabaseError databaseError) {
        BA.Log("Error al leer: " + databaseError.getCode());
        }
    });//myRef.addValueEventListener           
     }//IniciarListener()
}//MyFirebaseListener

#End If
'---------------------------------------------------------------------------------

en B4XPages.MainPage

'despues de haberte logeado en Firebase inicializar Listener
Sub IniciarFirebase
    Dim streamMeta, jo As JavaObject
    streamMeta = jo.InitializeNewInstance(Application.PackageName & ".main$MyFirebaseListener", Null)
    streamMeta.RunMethod("IniciarListener",Null)
End Sub

'I am not very expert in Java, if someone can improve it ...... welcome.
 

reza71

Member
src\fgf\j\j\main.java:3: error: package com.google.firebase.database does not exist
import com.google.firebase.database.DatabaseReference;
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error

javac 11.0.1

how can fix
 

musaso

Active Member
Licensed User
src\fgf\j\j\main.java:3: error: package com.google.firebase.database does not exist
import com.google.firebase.database.DatabaseReference;
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error

javac 11.0.1

how can fix
In my App I don't use any Firebase library.
 

DonManfred

Expert
Licensed User
Longtime User

amorosik

Expert
Licensed User
Do you think this code can be made available to work in the B4J environment?
I ask this because it would make it possible to make the db Firebase activity 'visible' also on a pc
And therefore interfacing with procedures running on a pc would be very simplified.
 

musaso

Active Member
Licensed User
Do you think this code can be made available to work in the B4J environment?
I ask this because it would make it possible to make the db Firebase activity 'visible' also on a pc
And therefore interfacing with procedures running on a pc would be very simplified.
Sorry for the delay in responding, I don't know if it works for B4J I haven't checked it.
 
Top