Configurações básicas

Inicialmente deve ser criado um projeto no Firebase console e depois adicioná-los em seu projeto no Android Studio. A documentação oficial explica esse processo passo a passo. Dessa forma, acesse: https://firebase.google.com/docs/android/setup?hl=pt-br.

Conexão com o banco

Após as configurações básicas, é necessário obter uma referância do banco de dados, isto vai depender do banco que será utilizado, pois o Firebase , possui vários banco: como o Firestore e o Realtime Database.

FirebaseFirestore db = db = FirebaseFirestore.getInstance();

DatabaseReference refBd = FirebaseDatabase.getInstance().getReference();

Salvar / listar dados no banco

Para salvar os dados no Firestore, você precisa criar uma coleção e os dados serão salvos na estrutura de um Map.

db.collection("minha lista")
             .add(lista.toMap())
             .addOnSuccessListener(documentReference -> {
                 Toast.makeText(this, "Sucesso", Toast.LENGTH_LONG).show();
                 obterDados();
             })
             .addOnFailureListener(e -> {
                 Log.w("Cadastro", "Erro", e);
             });

Para obter os dados do Firestore basta acessar QueryDocumentSnapshot document : task.getResult() e através do document acessar os campos dos objetos mapeados, por exemplo document.getString("nome do campo"), no caso de inteiro document.getLong("nome do campo"). Veja o código completo abaixo:

db.collection("minha lista")
               .get()
               .addOnCompleteListener(task -> {
                   if (task.isSuccessful()) {
                       List<String> lista = new ArrayList<>();
                       for (QueryDocumentSnapshot document : task.getResult()) {
                           String nome = document.getString("nome do campo");
                           int idade = Objects.requireNonNull(document.getLong("nome do campo")).intValue();
                           Log.d("Dado",document.getId() + " => " + document.getData());
                       }
                   } else {
                       Log.d("Erro", "Erro ao obter dados: ", task.getException());
                   }
               });

Para mais detalhes sobre leitura e gravação de dados no Realtime Database acesse a documentação oficial: https://firebase.google.com/docs/database/android/read-and-write?hl=pt-br#java_2.

Para mais detalhes sobre o Firestore acesse a documentação oficial: https://firebase.google.com/docs/firestore/quickstart?hl=pt-br.

Exemplo prático:

  • activity_main.xml

    <!-- //Solução feita pelo estudante Luan Luz -->
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="16dp"
        android:paddingRight="16dp">
        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="2"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/titulo"
                />
                <EditText
                    android:id="@+id/tituloText"
                    android:layout_width="0dp"
                    android:layout_weight="3"
                    android:hint="@string/digite_o_titulo_do_filme"
                    android:layout_height="wrap_content"
                    android:imeOptions="flagNoExtractUi"
                />
            </TableRow>
            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="2"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/nota"
                />
                <EditText
                    android:id="@+id/notaText"
                    android:layout_width="0dp"
                    android:layout_weight="3"
                    android:hint="@string/digite_a_nota_para_o_filme"
                    android:layout_height="wrap_content"
                    android:imeOptions="flagNoExtractUi"
                    android:inputType="number"
                />
            </TableRow>
        </TableLayout>
        <Button
            android:id="@+id/salvarButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/salvar"
            android:onClick="criar"
        />
        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
        />
    </LinearLayout>
  • MainActivity.java

    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.QueryDocumentSnapshot;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Objects;
    public class MainActivity extends AppCompatActivity {
        private EditText tituloText;
        private EditText notaText;
        private ListView listView;
        private ArrayAdapter<String> adapter;
        private final String NOME_COLECAO = "filmes";
        private FirebaseFirestore db;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            db = FirebaseFirestore.getInstance();
            tituloText = findViewById(R.id.tituloText);
            notaText = findViewById(R.id.notaText);
            listView = findViewById(R.id.listView);
            adapter = new ArrayAdapter<>(
                    this,
                    android.R.layout.simple_list_item_1,
                    new ArrayList<>()
            );
            listView.setAdapter(adapter);
            obterDados();
        }
        public void criar(View view) {
            String tituloTextValue = tituloText.getText().toString();
            String notaTextValue = notaText.getText().toString();
            if (tituloTextValue.isEmpty() || notaTextValue.isEmpty()) {
                return;
            }
            limparCampos();
            int nota = Integer.parseInt(notaTextValue);
            Filme filme = new Filme(tituloTextValue, nota);
            db.collection(NOME_COLECAO)
                    .add(filme.toMap())
                    .addOnSuccessListener(documentReference -> {
                        Toast.makeText(this, "Sucesso ao cadastrar filme", Toast.LENGTH_LONG).show();
                        obterDados();
                    })
                    .addOnFailureListener(e -> {
                        Log.w("Cadastro", "Erro ao cadastrar", e);
                    });
        }
        private void obterDados() {
            db.collection(NOME_COLECAO)
                    .get()
                    .addOnCompleteListener(task -> {
                        if (task.isSuccessful()) {
                            List<String> lista = new ArrayList<>();
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                String titulo = document.getString("titulo");
                                int nota = Objects.requireNonNull(document.getLong("nota")).intValue();
                                lista.add(titulo + " - " + nota);
                                Log.d("Dado",document.getId() + " => " + document.getData());
                            }
                            adapter.clear();
                            adapter.addAll(lista);
                            adapter.notifyDataSetChanged();
                        } else {
                            Log.d("Erro", "Erro ao obter dados: ", task.getException());
                        }
                    });
        }
        private void limparCampos() {
            tituloText.setText("");
            notaText.setText("");
        }
    }
  • Filme.java

    import java.util.HashMap;
    import java.util.Map;
    public class Filme {
        public String titulo;
        public int nota;
        public Filme() {}
        public Filme(String titulo, int nota) {
            this.titulo = titulo;
            this.nota = nota;
        }
        public Map<String, Object> toMap() {
            HashMap<String, Object> result = new HashMap<>();
            result.put("titulo", titulo);
            result.put("nota", nota);
            return result;
        }
    }