Olá! Nesse post vamos fazer um app com persistêcia de dados usando Ormlite. Ormlite é uma biblioteca que tem a função de ser fazer encapsular a persistencia tornando possível tratarmos dados relacionais como objetos, para quem já trabalha com Hibernate podemos dizer que é uma versão bem light (similar).

Para mais informações acesse: http://ormlite.com/. Nesse link também pode ser baixada os arquivos .jar para serem colocados na pasta lib de seu projeto.

Bem vamos começar com a classe pessoa que além de representar o objeto também representa a tabela no banco de dados:

package com.example.ormliteexemplo;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

//anotação que indica que a classe representa uma tabela no bd
@DatabaseTable
public class Pessoa {

  //anotação que indica que o atributo é um campo no bd de id auto increment
  @DatabaseField(generatedId = true)
  private Integer id;

  //anotação que indica que o atributo é um campo no bd
  @DatabaseField
  private String nome;

  //anotação que indica que o atributo é um campo no bd
  @DatabaseField
  private Integer idade;

  public Integer getId() {
    return id;
  }

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

  public String getNome() {
    return nome;
  }

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

  public Integer getIdade() {
    return idade;
  }

  public void setIdade(Integer idade) {
    this.idade = idade;
  }

  @Override
  public String toString() {
    return "Pessoa [nome = " + nome + ", idade = " + idade + "]";
  }
  
  

}

									

 

Vamos precisar também de uma classe utilitária responsável por gerenciar as conexões com o banco de dados:

package com.example.ormliteexemplo;

import java.sql.SQLException;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

//classe utilitaria responsavel pela criação do banco fornecimento de conexoes com bd
public class DataBaseUtil extends OrmLiteSqliteOpenHelper {

  private static final String DATABASE_NAME = "ihomecare.db";
  private static final int DATABASE_VERSION = 1;

  public DataBaseUtil(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  public static ConnectionSource getConnectionSource(Context context) {
    return new DataBaseUtil(context).getConnectionSource();
  }

  // metodo responsavel pela criacao das tabelas
  @Override
  public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
    try {
      TableUtils.createTable(connectionSource, Pessoa.class);
    } catch (SQLException e) {
      e.printStackTrace();
    }

  }

  // metodo responsavel pelos drops tables
  @Override
  public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
      int oldDbVersion, int newDbVersion) {
    try {
      TableUtils.dropTable(connectionSource, Pessoa.class, true);
      onCreate(db, connectionSource);
    } catch (SQLException e) {
      e.printStackTrace();
    }

  }

}

									

 

Agora o xml do laytout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity" >

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

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hello_world" />
        </LinearLayout>
    </ScrollView>

    <TextView
        android:id="@+id/tvNome"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:padding="15dp"
        android:text="Nome"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FFFFFF" />

    <EditText
        android:id="@+id/etNome"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:hint="Insira o nome aqui"
        android:inputType="textPersonName"
        android:textColor="#000000"
        android:textColorHint="#BEBEBE" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tvIdade"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:padding="15dp"
        android:text="Idade"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FFFFFF" />

    <EditText
        android:id="@+id/etIdade"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:hint="Insira a idade aqui"
        android:inputType="number"
        android:textColor="#000000"
        android:textColorHint="#BEBEBE" >
    </EditText>

    <Button
        android:id="@+id/btGravar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="Gravar" />

    <Button
        android:id="@+id/btVer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="Ver pessoas gravadas" />

</LinearLayout>
									

 

e finalmente a nossa Acitivity:

package com.example.ormliteexemplo;

import java.sql.SQLException;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.support.ConnectionSource;

public class MainActivity extends Activity {
  
  private EditText etNome, etIdade;
  private Button btGravar, btVer;
  
  //metodo que retorna uma conexao com o bd
  private ConnectionSource getConnectionSource(){
    return new DataBaseUtil(MainActivity.this).getConnectionSource();
  }
  
  //metodo que retorna um dao do tipo Pessoa
  //recebe o tipo e o tipo da pk
  private Dao<Pessoa, Integer> getPessoaDao() throws SQLException{
    Dao<Pessoa, Integer> dao = DaoManager.createDao(getConnectionSource(), Pessoa.class);
    return dao;
  }
  
  //metodo que instancia os componentes de tela
  private void instantiateViews(){
    etNome = (EditText) findViewById(R.id.etNome);
    etIdade = (EditText) findViewById(R.id.etIdade);
    btGravar = (Button) findViewById(R.id.btGravar);
    btVer = (Button) findViewById(R.id.btVer);
  }
  
  //metodo que checa os campos vazios
  private String checkFields(){
    StringBuilder sb = new StringBuilder("");
    if (etNome.toString().length() < 1 || etIdade.toString().length() < 1){
      sb.append("nPreencha os campos corretamente");
    }
    return sb.toString();
  }
  
  //metodo que sera chamado ao gravar os dados
  private boolean gravar() throws SQLException{
    int x = 0;
    if (checkFields().equals("")){
      Pessoa pessoa = new Pessoa();
      pessoa.setNome(etNome.getText().toString());
      pessoa.setIdade(Integer.parseInt(etIdade.getText().toString()));
      //create é o insert do objeto no bd, retorna  a qtd de linhas inseridas
      x = getPessoaDao().create(pessoa);
    }else{
      showDialog("Erro", checkFields(), "OK");
    }
    return x > 0;
  }
  
  //metodo chamado para mostrar as pessoas gravadas no bd
  private void showPessoas(){
    List<Pessoa> pessoas = null;
    try {
      pessoas = getPessoaDao().queryForAll();
    } catch (SQLException e) {
      showDialog("Erro", "Detalhes:n" + e.getMessage() , "OK");
      e.printStackTrace();
    }
    if (pessoas != null && pessoas.size() > 0){
      for (int i = 0; i < pessoas.size(); i++){
        Toast toast = Toast.makeText(MainActivity.this, pessoas.get(i).toString(), Toast.LENGTH_SHORT);
        toast.show();
      }
    }else{
      Toast toast = Toast.makeText(MainActivity.this, "Nenhuma pessoa gravado no banco", Toast.LENGTH_LONG);
      toast.show();
    }
  }
  

  //metodo auxiliar para mostrar uma caixa de dialogo
  private void showDialog(String title, String message, String positive) {
    AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
    dialog.setMessage(message);
    dialog.setPositiveButton(positive,
        new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface di, int arg) {

          }
        });
    dialog.setTitle(title);
    dialog.show();
  }
  
  //adicionando ações aos botoes
  private void addButtonsLinsteners(){
    btGravar.setOnClickListener(new Button.OnClickListener() {
      public void onClick(View v) {
        try {
          if(gravar()){
            showDialog("Aviso", "Dados gravados com sucesso!", "OK");
          }else{
            showDialog("Erro", "Dados não foram gravados!", "OK");
          }
        } catch (SQLException e) {
          showDialog("Erro", "Dados não foram gravados! Detalhes:n" + e.getMessage() , "OK");
          e.printStackTrace();
        }
      }

    });
    
    btVer.setOnClickListener(new Button.OnClickListener() {
      public void onClick(View v) {
        showPessoas();
      }

    });
  }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}

									

 

Abaixo segue o link para download do projeto completo. Até +

https://github.com/juliocnsouzadev/android_exemples/tree/master/OrmliteExemplo

 

Vamos agora montar a tela inicial de nosso app, que será uma lista com imagem e texto do item do menu. Primeiramente vamos ao xml main já criado automaticamente quando criamos nosso projeto: More »

Vamos agora trabalhar com as classes responsáveis pela persistência dos dados em nossa aplicação. Primeiramente vamos criar uma classe auxiliar do banco de dados: More »