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
}
}
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial SenseObraDerivada 4.0