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
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:id="@+id/main" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/buttonConectar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="Conectar" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerUsuarios" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> -
item_lista.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="12dp"> <TextView android:id="@+id/txtNome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Nome" android:textSize="16sp" android:textStyle="bold"/> <TextView android:id="@+id/txtEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Email"/> </LinearLayout> -
MainActivity.java
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private UsuarioViewModel viewModel; private UsuarioAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = findViewById(R.id.recyclerUsuarios); recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new UsuarioAdapter(new ArrayList<>()); recyclerView.setAdapter(adapter); viewModel = new ViewModelProvider(this) .get(UsuarioViewModel.class); viewModel.getUsuarios().observe(this, new Observer<List<Usuario>>() { @Override public void onChanged(List<Usuario> usuarios) { adapter = new UsuarioAdapter(usuarios); recyclerView.setAdapter(adapter); } }); viewModel.getErro().observe(this, new Observer<String>() { @Override public void onChanged(String error) { Toast.makeText( MainActivity.this, error, Toast.LENGTH_SHORT ).show(); } }); Button buttonConectar = findViewById(R.id.buttonConectar); buttonConectar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Usuario usuario = new Usuario(null, "Ana", "email@email.com"); viewModel.addUsuario(usuario); } }); } }// -
Usuario.java
public class Usuario { private String id; private String nome; private String email; public Usuario() { } public Usuario(String id, String nome, String email) { this.id = id; this.nome = nome; this.email = email; } public String getId() { return id; } public String getNome() { return nome; } public String getEmail() { return email; } public void setId(String id) { this.id = id; } public void setNome(String nome) { this.nome = nome; } public void setEmail(String email) { this.email = email; } } -
UsuarioAdapter.java
import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class UsuarioAdapter extends RecyclerView.Adapter<UsuarioAdapter.UserViewHolder> { private List<Usuario> usuarios; public UsuarioAdapter(List<Usuario> usuarios) { this.usuarios = usuarios; } @NonNull @Override public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_lista, parent, false); return new UserViewHolder(view); } @Override public void onBindViewHolder(@NonNull UserViewHolder holder, int position) { Usuario usuario = usuarios.get(position); holder.txtNome.setText(usuario.getNome()); holder.txtEmail.setText(usuario.getEmail()); } @Override public int getItemCount() { return usuarios.size(); } static class UserViewHolder extends RecyclerView.ViewHolder { TextView txtNome, txtEmail; public UserViewHolder(@NonNull View itemView) { super(itemView); txtNome = itemView.findViewById(R.id.txtNome); txtEmail = itemView.findViewById(R.id.txtEmail); } } } -
UsuarioRepository.java
import androidx.annotation.NonNull; 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 java.util.ArrayList; import java.util.List; public class UsuarioRepository { private DatabaseReference firebase; public UsuarioRepository() { firebase = FirebaseDatabase .getInstance() .getReference("usuarios"); } public void addUsuario(Usuario usuario) { String id = firebase.push().getKey(); usuario.setId(id); firebase.child(id).setValue(usuario); } public void obterUsuarios(UsuariosListener listener) { firebase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { List<Usuario> list = new ArrayList<>(); for (DataSnapshot child : snapshot.getChildren()) { Usuario usuario = child.getValue(Usuario.class); if (usuario != null) { list.add(usuario); } } listener.onSuccess(list); } @Override public void onCancelled(@NonNull DatabaseError error) { listener.onError(error.getMessage()); } }); } public void updateUser(Usuario usuario) { firebase.child(usuario.getId()).setValue(usuario); } public void deleteUser(String id) { firebase.child(id).removeValue(); } public interface UsuariosListener { void onSuccess(List<Usuario> usuarios); void onError(String error); } } -
UsuarioViewModel.java
import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import java.util.List; public class UsuarioViewModel extends ViewModel { private UsuarioRepository repository = new UsuarioRepository(); private MutableLiveData<List<Usuario>> usuariosLiveData = new MutableLiveData<>(); private MutableLiveData<String> erroLiveData = new MutableLiveData<>(); public UsuarioViewModel() { obterUsuarios(); } public LiveData<List<Usuario>> getUsuarios() { return usuariosLiveData; } public LiveData<String> getErro() { return erroLiveData; } public void obterUsuarios() { repository.obterUsuarios(new UsuarioRepository.UsuariosListener() { @Override public void onSuccess(List<Usuario> usuarios) { usuariosLiveData.setValue(usuarios); } @Override public void onError(String error) { erroLiveData.setValue(error); } }); } public void addUsuario(Usuario usuario) { repository.addUsuario(usuario); } public void deleteUsuario(String id) { repository.deleteUser(id); } public void updateUsuario(Usuario usuario) { repository.updateUser(usuario); } }