Omet navegació

4.3 CF: Utilització des d'Android

De forma absolutament paral·lela a com quan vam veure el Realtime Database per a Android, ara toca el torn d'accedir al Cloud Firestore de Firebase des d'Android. Com veurem, per a fer la connexió ens deixarem ajudar també per l'assistent.

El projecte s'anomenarà  Tema7_FirebaseCF.

Nota important

Per a accedir a Cloud Firestore i que no ens falle el programa, haurem de posar en el build.gradle de l'aplicació, dins de android i dins de defaultConfig el següent:

 multiDexEnabled true

Si no ho fem així ens pot donar el següent error:

Cannot fit requested classes in a single dex file (# methods: 80444 > 65536)

I com sempre, per a que reconega els elements que tenim en els layout, haurem de posar al principi:

id 'kotlin-android-extensions'

El activity_main.xml serà:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Spinner
android:id="@+id/comboXats"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/usuari"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text=""
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/comboXats"
android:background="#dddddd"/>


<TextView
android:id="@+id/ultim"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text=""
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/usuari"
android:background="#aaaaaa"/>

<EditText
android:id="@+id/text"
android:layout_width="317dp"
android:layout_height="44dp"
android:ems="10"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:background="#dddddd"/>

<Button
android:id="@+id/boto"
android:layout_width="wrap_content"
android:layout_height="44dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/text"
/>

<TextView
android:id="@+id/area"
android:layout_width="0dp"
android:layout_height="0dp"
android:text=""
app:layout_constraintBottom_toTopOf="@+id/text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ultim" />

</androidx.constraintlayout.widget.ConstraintLayout>

Els components que hem col·locat són:

  • Un EditText per al nom d'usuari (amb fons gris claret)
  • Un TextView, anomenat ultim, per a visualitzar l'últim missatge, que es coordinarà amb /Xats/XatProva/ultimMissatge (amb fons gris més fosc)
  • Un EditText anomenat text, on posarem els missatges que volem enviar (amb fons gris claret, baix de tot)
  • Un Button, anomenat boto, que quan l'apretem és quan s'enviarà el missatge.
  • Un TextView, anomenat area, on anirà tot el xat (amb fons blanc)
  • Un Spinner, per a poder seleccionar el xat entre uns quants xats (dalt de tot)

I aquest seria l' "esquelet" del programa:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.*
import java.text.SimpleDateFormat
import java.util.*

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"
        val pantPrincipal = this

        // Referències a la Base de Dades i als documents

        // Exemple de llegir tots els documents d'una col·lecció
        // Per a triar el xat

        // Exemple de lectura única: AddOnSuccessListener()
        // Per a posar el títol. Sobre /Xats/XatProva/nomXat

        // Exemple de listener de lectura contínua addSnapshotListener() sobre un document
        // Per a posar l'últim missatge registrat. Sobre /Xats/XatProva/ultimMissatge

        // Exemple de listener de lectura contínua addSnapshotListener() sobre una col·lecció
        // Per a posar tota la llista de missatges. Sobre /Xats/XatProva/missatges

        // Per a guardar dades
        // Primer sobre /Xats/XatProva/ultimUsuari i /Xats/XatProva/ultimMissatge
        // Després també com a documents en la col·lecció /Xats/XatProva/missatges
    }
}