Android Banco de Dados (Firebase)

Android Banco de Dados (Firebase)

Nessa lição vamos aprender como armazenar informações em um banco de dados utilizando o Firebase. No exemplo abaixo iremos criar uma listagem (listview) de produtos que virá de um banco de dados. Terá também a opção de cadastrar produtos novos, excluir, alterar e visualizar os produtos selecionados na listagem.

1- Crie um projeto no chamado AppBancoDeDadosFirebase e adicione as referências do RealTimeDatabase

2- Crie uma activity chamada ActivityPrincipal com um listview e quatros botões: novo, excluir, alterar e detalhe. A imagem mostra como deve estar a disposição dos botões juntamente com o listview.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_principal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.totemarcal.appbancodedados.ActivityPrincipal">

    <ListView
        android:choiceMode="singleChoice"
        android:id="@+id/listProdutos"
        android:layout_above="@+id/layoutBts"
        android:layout_alignParentTop="true"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"/>


    <LinearLayout
        android:id="@+id/layoutBts"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

                <Button
                    android:text="Novo"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btCadastrar"
                    android:onClick="onCLick"/>
                <Button
                    android:text="Excluir"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btExcluir"
                    android:onClick="btExcluir"/>
        </LinearLayout>
        <LinearLayout
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
                <Button
                    android:text="Alterar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btalterar" />
                <Button
                    android:text="Detalhe"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/btDetalhe" />

        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

3- Crie outra activity chamada ActivityProduto com os campos conforme imagem abaixo.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_table_form_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="2"
android:stretchColumns="2"
tools:context="com.example.totemarcal.exemploandroid.TableFormLayout">


<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <TextView android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nome:"/>


    <EditText
        android:id="@+id/edtNome"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="Informe Nome Do Produto">

        <requestFocus />
    </EditText>

</TableRow>



<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">

    <TextView android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Preço:" />


    <EditText android:id="@+id/edtPreco"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="Informe Preço do Produto"
        android:inputType="numberDecimal" />

</TableRow>


<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <TextView android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Quantidade:"
        />


    <EditText android:id="@+id/edtQuantidade"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="number"
        android:hint="Informe Quantidade" />

</TableRow>

<TableRow

    android:layout_height="wrap_content"
    android:layout_width="match_parent">


    <Button android:id="@+id/btnSalvar"
        android:layout_span="2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Salvar"
        android:layout_weight="1"
        android:onClick="onClick"/>
</TableRow>

<TableRow
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</TableRow>
</TableLayout>

4- A imagem da esquerda mostra a tela sem preferências cadastradas e a imagem da direta mostra com as preferências recuperadas.

sqlite2 sqlite1

5- Crie uma classe Produto.java que ir’representar a entidade de Produto.

public class Produto {
    private String id;
    private String nome;
    private float preco;
    private int quantidade;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public float getPreco() {
        return preco;
    }

    public void setPreco(float preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    @Override
    public String toString() {
        return this.nome;
    }
}

6- Implemente a classe ActivityPrincipal.java para carregar a listview a partir do Firebase.

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class ActivityPrincipal extends AppCompatActivity {

    private List<Produtos> list = new ArrayList<Produto>();
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        carregarListView();
    }

    @Override
    protected void onResume(){
        super.onResume();
    }

    public void carregarListView(){
        listView = (ListView) findViewById(R.id.listProdutos);

        final ArrayAdapter<Produto> adaptador = new ArrayAdapter<Produto>(this, android.R.layout.simple_list_item_checked, list);
        adaptador.clear();
        listView.setAdapter(adaptador);

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("produtos");

        myRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                list.add(dataSnapshot.getValue(Produto.class));
                adaptador.notifyDataSetChanged();
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                list.remove(dataSnapshot.getValue(Produto.class));
                adaptador.notifyDataSetChanged();
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

        
    }

    public void onCLick (View view){
        if(view.getId() == R.id.btCadastrar){
            startActivity(new Intent(this, ActivityProduto.class));
        }
    }

    public void btExcluir(View view){

        String selecionados = "";

        //Cria um array com os itens selecionados no listview
        SparseBooleanArray checked = listView.getCheckedItemPositions();
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("produtos");
        for (int i = 0; i < checked.size(); i++){
            Produto produto = (Produto) listView.getItemAtPosition(checked.keyAt(i));
            //pega os itens marcados
            myRef.child(produto.getId()).removeValue();
        }
        Toast.makeText(this, "Produto Apagado com Sucesso!", Toast.LENGTH_LONG).show();
        carregarListView();
    }

}

7- Implemente a classe ProdutoActivity.java para salvar produto no Firebase.

import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class ActivityProduto extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_produto);
    }

    public void onClick(View view){
        try{
            EditText edtNome = (EditText) findViewById(R.id.edtNome);
            EditText edtPreco = (EditText ) findViewById(R.id.edtPreco);
            EditText edtQuantidade = (EditText) findViewById(R.id.edtQuantidade);
            Produto produto = new Produto();
            produto.setNome(edtNome.getText().toString());
            produto.setPreco(Float.parseFloat(edtPreco.getText().toString()));
            produto.setQuantidade(Integer.parseInt(edtQuantidade.getText().toString()));
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference myRef = database.getReference("produtos").push();
            myRef.setValue(produto);
            produto.setId(myRef.getKey().toString());
            myRef.setValue(produto);
            Toast.makeText(this, "Cadastrado com sucesso!", Toast.LENGTH_SHORT).show();
            this.finish();
        }catch (Exception e){
            e.getStackTrace();
        }


    }
}

 

Obs.: Se não estiver autenticado no Firebase o usuário da aplicação deverá ter permissão para ler e escrever sem autenticação.
Na base do Firebase adiciona na aba de regras

{
  "rules": {
    "produtos": {
    	".read": true,
      ".write": true  
    }
  }
}

Deixe uma resposta

Specify Google Client ID and Secret in Super Socializer > Social Login section in admin panel for Google Login to work

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *