Omet navegació

2.2.3.3 RD-Android: Tot l'exemple

Tot l'exemple

Anem a posar tot l'exemple que arreplega tot l'anterior. Quedarà un poc embolicat, però intentarem explicar després cada eixida per quina causa és.

JAVA

Primer la classe Missatge.java:

    public class Missatge{
public String nom;
public String contingut;

public Missatge(){
}

public Missatge(String nom,String cont){
this.nom=nom;
this.contingut=cont;
}

public String getNom(){
return this.nom;
}
public String getContingut(){
return this.contingut;
}
public void setNom(String nom){
this.nom=nom;
}
public void setContingut(String contingut){
this.contingut=contingut;
}
}

I aquest el programa:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView ultim = (TextView)findViewById(R.id.ultim);
        final TextView area = (TextView)findViewById(R.id.area);
        final EditText text = (EditText)findViewById(R.id.text);

        final Button boto = (Button)findViewById(R.id.boto);
        boto.setText("Enviar");

        // Referències a la Base de Dades i a les variables a1, nomXat i xat
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference refA1 = database.getReference("a1");
        final DatabaseReference nomXat = database.getReference("nomXat");
        final DatabaseReference xat = database.getReference("xat");

        // Exemple de guardar dades. Primer sobre a1, i despŕes sobre la llista xat
        boto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                refA1.setValue(text.getText().toString());

                Missatge m = new Missatge("Usuari1",text.getText().toString());
                xat.push().setValue(m);

                text.setText("");
            }
        });

        // Exemple de listener de lectura única addListenerForSingleValueEvent()
        // Per a posar el títol. Sobre nomXat
        nomXat.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String value = dataSnapshot.getValue(String.class);
                setTitle(value);
            }

            @Override
            public void onCancelled(DatabaseError error) {
            }
        });

        // Exemple de listener de lectura contínua addValueEventListener()
        // Per a posar l'últim missatge registrat. Sobre a1
        refA1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String value = dataSnapshot.getValue(String.class);
                ultim.setText(value);
            }

            @Override
            public void onCancelled(DatabaseError error) {
            }
        });

        // Exemple de listener d'una llista addChildEventListener()
        // Per a posar tota la llista de missatges. Sobre xat
        xat.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                area.append(dataSnapshot.child("nom").getValue(String.class) + ": " + dataSnapshot.child("contingut").getValue(String.class) + "\n");
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

    }
}


KOTLIN

La classe Missatge queda molt senzilla:

class Missatge(val nom: String, val contingut: String) {}

I el programa seria aquest:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        boto.text = "Enviar"

        // Referències a la Base de Dades i a les variables a1, nomXat i xat
        val database = FirebaseDatabase.getInstance()
        val refA1 = database.getReference("a1")
        val nomXat = database.getReference("nomXat")
        val xat = database.getReference("xat")

        // Exemple de guardar dades. Primer sobre a1, i despŕes sobre la llista xat
        boto.setOnClickListener {
            refA1.setValue(text.text.toString())
            xat.push().setValue(Missatge("Usuari1", text.text.toString()))
            text.setText("")
        }
        // Exemple de listener de lectura única addListenerForSingleValue()
        // Per a posar el títol. Sobre nomXat
        nomXat.addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                val value = dataSnapshot.getValue(String::class.java)
                setTitle(value)
            }

            override fun onCancelled(error: DatabaseError) {
            }
        })

        // Exemple de listener de lectura contínua addValueEventListener()
        // Per a posar l'últim missatge registrat. Sobre a1
        refA1.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                val value = dataSnapshot.getValue(String::class.java)
                ultim.setText(value)
            }

            override fun onCancelled(error: DatabaseError) {
            }
        })

        // Exemple de listener d'una llista addChildEventListener()
        // Per a posar tota la llista de missatges. Sobre xat
        xat.addChildEventListener(object : ChildEventListener {
            override fun onChildAdded(dataSnapshot: DataSnapshot, s: String?) {
                area.append(
                    dataSnapshot.child("nom").getValue(String::class.java) + ": " + dataSnapshot.child("contingut").getValue(String::class.java) + "\n"                    );
            }
            override fun onChildChanged(dataSnapshot: DataSnapshot, s: String?) {
            }
            override fun onChildRemoved(dataSnapshot: DataSnapshot) {
            }
            override fun onChildMoved(dataSnapshot: DataSnapshot, s: String?) {
            }
            override fun onCancelled(databaseError: DatabaseError) {
            }
        })

    }
}

Tant en el cas de Java com de Kotlin, el resultat seria aquest: