Quando trabalhamos com desenvolvimento de sistemas, independente de sua plataforma ou linguagem, sempre nos deparamos com a necessidade de ter que armazenar essas informações em uma base de dados, consultar, editar e apagar.
Este artigo tem o intuito de ajudar programadores iniciantes na plataforma Xamarin Studio a criarem suas aplicações móveis possibilitando o armazenamento de suas informações em uma banco de dados SQLite.
O que é o Xamarin Studio
É um IDE autônomo para desenvolvimento de aplicativos móveis que permite o desenvolvimento de aplicações multi-plataforma utilizando a linguagem C#.
O que é o SQLite
SQLite é um mecanismo de banco de dados, compatível com ACID. Ao contrário dos sistemas cliente-servidor, SQLite está ligada à aplicação móvel, tornando-se parte dela. Cada operação é executada dentro do aplicativo móvel através de chamadas e os métodos fornecidos pela biblioteca SQLite são escritos em C e tem um tamanho relativamente pequeno.
Iniciando o Projeto
Se você não possui o Xamarin Studio, pode baixá-lo no Site do Xamarin.
Após a instalação (que é bem simples, abra o programa e escolha a opção Abrir. Clique em Arquivo -> Novo -> Soluções e escolha a opção Android Application. Defina um nome para seu projeto e clique em OK, conforme mostra a Figura 1.
Criar Classe Database
Com o nosso projeto já criado, agora iremos criar nossa primeira classe, a qual chamaremos de "Database". Em seguida, clique com botão direito do mouse sobre o projeto Conexao -> Adicionar -> Novo Arquivo. Selecione a opção Android Class e defina um nome. Ao final, clique em New. A tela desse passo está presente na Figura 2.
Essa classe permite a comunicação da aplicação com o banco de dados de tal maneira que possamos criar o banco, as tabelas, as colunas, efetuar operações de inserção, edição, exclusão e consulta de dados tudo a partir dela. Na Listagem 1 temos o código da classe com seus comentários para que você possa entender melhor.
Saiba mais Confira Guia Completo de Xamarin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Database.Sqlite;
using System.IO;
namespace Conexao
{
class Database
{
//objeto para manipulação do banco de dados SQLiteDatabase
private SQLiteDatabase sqldb;
//String para manipulação da consulta
private string sqldb_query;
//String para manipulação Mensagem
private string sqldb_mensagem;
//Bool para verificar a disponibilidade do banco de dados
private bool sqldb_dispoTalhao;
//Inicializa uma nova instância de classe de banco de dados
public Database()
{
sqldb_mensagem = "";
sqldb_dispoTalhao = false;
}
//Um construtor argumento, inicializa uma nova instância da classe de banco de dados
com o parâmetro nome do banco de dados
public Database(string sqldb_nome)
{
try
{
sqldb_mensagem = "";
sqldb_dispoTalhao = false;
CriarDatabase(sqldb_nome);
}
catch (SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
}
//Obtém ou define o valor, dependendo da disponibilidade do banco de dados
public bool DatabaseDispoTalhao
{
get{ return sqldb_dispoTalhao; }
set{ sqldb_dispoTalhao = value; }
}
//Obtém ou define o valor para o tratamento de mensagens
public string Mensagem
{
get{ return sqldb_mensagem; }
set{ sqldb_mensagem = value; }
}
//Cria um novo banco de dados cujo nome é dado pelo parâmetro
public void CriarDatabase(string sqldb_nome)
{
try
{
sqldb_mensagem = "";
string sqldb_location = System.Environment
.GetFolderPath(System.Environment.SpecialFolder.Personal);
string sqldb_path = Path.Combine(sqldb_location, sqldb_nome);
bool sqldb_exists = File.Exists(sqldb_path);
if(!sqldb_exists)
{
sqldb = SQLiteDatabase.OpenOrCreateDatabase(sqldb_path,null);
sqldb_query = "CREATE TABLE IF NOT EXISTS Registros (_id INTEGER PRIMARY
KEY AUTOINCREMENT, Produtor VARCHAR, Safra VARCHAR, Propriedade VARCHAR,
Plano VARCHAR, Avaliador VARCHAR, Praga VARCHAR, Descricao VARCHAR,
Talhao VARCHAR);";
sqldb.ExecSQL(sqldb_query);
sqldb_mensagem = "Banco de dados '" + sqldb_nome + "' criado com sucesso!";
}
else
{
sqldb = SQLiteDatabase.OpenDatabase(sqldb_path, null,
DatabaseOpenFlags.OpenReadwrite);
sqldb_mensagem = "Banco de dados '"+ sqldb_nome + "'
carregado com sucesso!";
}
sqldb_dispoTalhao=true;
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
}
//Adiciona um novo registro com os parâmetros dados
public void AddRegistro(string sProdutor, string sSafra, string sPropriedade,string
sPlano,string sAvaliador,string sPraga, string sDescricao,string sTalhao)
{
try
{
sqldb_query = "INSERT INTO Registros
(Produtor,Safra,Propriedade,Plano,Avaliador,Praga,Descricao,Talhao)
VALUES ('" + sProdutor + "','" + sSafra + "','" + sPropriedade + "','" +
sPlano + "','" + sAvaliador + "','" + sPraga + "','" + sDescricao
+ "','" + sTalhao + "');";
sqldb.ExecSQL(sqldb_query);
sqldb_mensagem = "Registro salvo com sucesso!";
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
}
//Atualiza um registro existente com os parâmetros dados, dependendo do parâmetro id
public void AlterarRegistro(int iId, string sProdutor, string sSafra, string
sPropriedade,string sPlano,string sAvaliador,string sPraga, string sDescricao,
string sTalhao)
{
try
{
sqldb_query="UPDATE Registros SET Produtor ='" + sProdutor + "', Safra ='" +
sSafra + "', Propriedade ='" + sPropriedade + "', Plano ='" + sPlano + "',
Avaliador ='" + sAvaliador + "', Praga ='" + sPraga + "', Descricao ='" +
sDescricao + "', Talhao ='" + sTalhao + "' WHERE _id ='" + iId + "';";
sqldb.ExecSQL(sqldb_query);
sqldb_mensagem = "Registro (" + iId + ") alterado com sucesso!";
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
}
//Exclui o registro associado ao parâmetro id
public void DeletarRegistro(int iId)
{
try
{
sqldb_query = "DELETE FROM Registros WHERE _id ='" + iId + "';";
sqldb.ExecSQL(sqldb_query);
sqldb_mensagem = "Registro " + iId + " deletado com sucesso!";
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
}
//Procura um registro e retorna um cursor Android.Database.ICursor
//Mostra todos os registros da tabela
public Android.Database.ICursor GetRecordCursor()
{
Android.Database.ICursor sqldb_cursor = null;
try
{
sqldb_query = "SELECT*FROM Registros;";
sqldb_cursor = sqldb.RawQuery(sqldb_query, null);
if(!(sqldb_cursor != null))
{
sqldb_mensagem = "Registro não encontrado!";
}
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
return sqldb_cursor;
}
//Procura um registro e retorna um cursor Android.Database.ICursor
//Mostra os registros de acordo com critérios de pesquisa
public Android.Database.ICursor GetRecordCursor(string sColumn, string sValue)
{
Android.Database.ICursor sqldb_cursor = null;
try
{
sqldb_query = "SELECT*FROM Registros WHERE " + sColumn + " LIKE '"
+ sValue + "%';";
sqldb_cursor = sqldb.RawQuery(sqldb_query, null);
if(!(sqldb_cursor != null))
{
sqldb_mensagem = "Registro não encontrado!";
}
}
catch(SQLiteException ex)
{
sqldb_mensagem = ex.Message;
}
return sqldb_cursor;
}
}
}
Criando o Layout da Aplicação
Para criar o layout, dê um clique na pasta Resources para abrir as demais pastas. Em seguida, clique com o botão direito do mouse sobre a pasta layout -> adicionar -> novo arquivo e selecione a opção Android Activity. Defina um nome e clique em New, conforme mestra a Figura 3.
Precisamos criar um TextView para cada item que iremos utilizar em nosso banco de dados. Na Listagem 2 você confere todo o código do layout.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="Id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Id_linha"
android:layout_weight="1"
android:gravity="center"
android:textSize="15dp"
android:textColor="#ffffffff"
android:textStyle="bold" />
<TextView
android:text="Praga"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Praga_linha"
android:layout_weight="1"
android:textSize="15dp"
android:textColor="#ffffffff"
android:textStyle="bold" />
<TextView
android:text="Descricao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Descricao_linha"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:textColor="#ffffffff" />
<TextView
android:text="Proprietario"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Proprietario_linha"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:textColor="#ffffffff"
android:gravity="center" />
<TextView
android:text="Propriedade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Propriedade_linha"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:textColor="#ffffffff" />
<TextView
android:text="Talhao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Talhao_linha"
android:layout_weight="1"
android:textSize="15dp"
android:textStyle="bold"
android:textColor="#ffffffff"
android:gravity="center" />
</LinearLayout>
Para alterar o layout main, vamos dentro da Pasta Resource -> Layout -> Main.axml. Em seguida, clique duas vezes no Main.axml. Veja o layout principal na Figura 4.
Essa será nossa pagina principal onde teremos a maior parte das funcionalidades do sistema.
Na Listagem 3 temos o código do layout.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff121c11">
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:background="#ff636718"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<ImageView
android:src="@drawable/green_wormhole"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView1"
android:paddingLeft="10dp" />
<TextView
android:text="Catalogar Ocorrências"
android:textColor="#ffffffff"
android:textSize="25dp"
android:gravity="left"
android:id="@+id/TituloLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:paddingLeft="10dp" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff1e2e1d"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:id="@+id/linearLayout7">
<TextView
android:text="Produtor"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff"
android:id="@+id/textView5" />
<TextView
android:text="Safra"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textColor="#ffffffff"
android:textStyle="bold"
android:id="@+id/textView6" />
<TextView
android:text="Propriedade"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff"
android:id="@+id/textView7" />
<TextView
android:text="Plano de Plantio"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff"
android:id="@+id/textView8" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff1e2e1d"
android:id="@+id/linearLayout6">
<EditText
android:id="@+id/txtProdutor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtSafra"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtPropriedade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtPlano"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff1e2e1d"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:text="Avaliador"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff" />
<TextView
android:text="Tipo de Praga"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textColor="#ffffffff"
android:textStyle="bold" />
<TextView
android:text="Descrição"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff" />
<TextView
android:text="Talhão"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="#ffffffff" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff1e2e1d"
android:paddingBottom="20dp">
<EditText
android:id="@+id/txtAvaliador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtPraga"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtDescricao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/txtTalhao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<TextView
android:text="msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/shMsg"
android:background="#ff304a2e"
android:textColor="#ffa1a728"
android:textStyle="bold"
android:textSize="20dp"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp" />
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:background="#ff304a2e"
android:gravity="center"
android:id="@+id/linearLayout1"
android:paddingBottom="20dp"
android:paddingTop="20dp">
<ImageButton
android:layout_width="169dp"
android:paddingLeft="10dp"
android:layout_height="42dp"
android:background="@drawable/bug_add"
android:id="@+id/imgAdd"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp" />
<ImageButton
android:layout_width="169dp"
android:paddingLeft="10dp"
android:layout_height="42dp"
android:background="@drawable/bug_edit"
android:id="@+id/imgEditar"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageButton
android:layout_width="169dp"
android:paddingLeft="10dp"
android:layout_height="42dp"
android:background="@drawable/bug_delete"
android:id="@+id/imgDeletar"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageButton
android:layout_width="169dp"
android:paddingLeft="10dp"
android:layout_height="42dp"
android:background="@drawable/bug_search"
android:id="@+id/imgBuscar"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<ImageButton
android:layout_width="169dp"
android:paddingLeft="10dp"
android:layout_height="42dp"
android:background="@drawable/bug_gps"
android:id="@+id/imgGps"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout8"
android:background="#ff304a2e"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/latitude"
android:textColor="#ffa1a728"
android:textSize="20dp"
android:textStyle="bold" />
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/longitude"
android:paddingLeft="20dp"
android:textColor="#ffa1a728"
android:textSize="20dp"
android:textStyle="bold" />
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/provedor"
android:paddingLeft="20dp"
android:textColor="#ffa1a728"
android:textSize="20dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:background="#ff636718"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<ImageView
android:src="@drawable/green_yellow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:paddingLeft="10dp" />
<TextView
android:text="Lista de Ocorrências"
android:textColor="#ffffffff"
android:textSize="25dp"
android:gravity="left"
android:id="@+id/TituloLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:paddingLeft="10dp" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:background="#ff1e2e1d"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp">
<TextView
android:text="Código:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="20dp"
android:layout_weight="1"
android:gravity="left"
android:id="@+id/id" />
<TextView
android:text="Praga:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:gravity="left"
android:textSize="20dp"
android:layout_weight="1"
android:id="@+id/nome" />
<TextView
android:text="Descrição:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_weight="1"
android:gravity="left"
android:textSize="20dp"
android:id="@+id/sobrenome" />
<TextView
android:text="Produtor:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_weight="1"
android:textSize="20dp"
android:gravity="left"
android:id="@+id/idade" />
<TextView
android:text="Propriedade:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_weight="1"
android:gravity="left"
android:textSize="20dp"
android:id="@+id/sobrenome" />
<TextView
android:text="Talhão:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_weight="1"
android:textSize="20dp"
android:gravity="left"
android:id="@+id/idade" />
</LinearLayout>
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:id="@+id/listItems" />
</LinearLayout>
Para criar a Main Activity class, dê um duplo clique no arquivo MainActivity.cs. Na Main Activity iremos fazer com que todo o processo da classe se comunique com o layout, de forma que todos os processos e eventos funcionem como desejado. Os principais eventos serão adicionar, editar, apagar, pesquisar e pegar as coordenadas do GPS. Dentro da classe também iremos alimentar nosso ListView com os dados armazenados em nosso banco de dados.
Na Listagem 4 temos o código da Main Activity.
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Locations;
using Android.Util;
namespace Conexao
{
[Activity (Label = "Controle de Pragas 1.0", MainLauncher = true)]
public class MainActivity : Activity, ILocationListener
{
//Classe de banco de dados novo objeto
Database sqldb;
//Produtor, Safra, Propriedade, Plano, Avaliador, Praga, Descricao, Talhão
EditText txtProdutor, txtSafra, txtPropriedade, txtPlano, txtAvaliador,
txtPraga, txtDescricao, txtTalhao;
//Mensagem objeto TextView para exibir dados
TextView shMsg;
//Adicionar, editar, apagar e pesquisar objetos ImageButton para tratamento eventos
ImageButton imgAdd, imgEditar, imgDeletar, imgBuscar;
//ListView objeto para exibir dados do banco de dados
ListView listItems;
//Add Gerenciador de Localização
LocationManager locMgr;
string tag = "MainActivity";
ImageButton btLocalizar;
TextView latitude;
TextView longitude;
TextView provedor;
//Inicia o evento para criar aplicativos
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
//Defina nosso layout principal como exibição padrão
SetContentView (Resource.Layout.Main);
//Inicializa novo objeto da classe de banco de dados
sqldb = new Database("controle_db");
//Obtém objetos Gps
SetContentView (Resource.Layout.Main);
btLocalizar = FindViewById<ImageButton> (Resource.Id.imgGps);
latitude = FindViewById<TextView> (Resource.Id.latitude);
longitude = FindViewById<TextView> (Resource.Id.longitude);
provedor = FindViewById<TextView> (Resource.Id.provedor);
//Obtém casos ImageButton objeto
imgAdd = FindViewById<ImageButton> (Resource.Id.imgAdd);
imgDeletar = FindViewById<ImageButton> (Resource.Id.imgDeletar);
imgEditar = FindViewById<ImageButton> (Resource.Id.imgEditar);
imgBuscar = FindViewById<ImageButton> (Resource.Id.imgBuscar);
//Obtém instâncias de objetos EditText
txtProdutor = FindViewById<EditText> (Resource.Id.txtProdutor);
txtSafra = FindViewById<EditText> (Resource.Id.txtSafra);
txtPropriedade = FindViewById<EditText> (Resource.Id.txtPropriedade);
txtPlano = FindViewById<EditText> (Resource.Id.txtPlano);
txtAvaliador = FindViewById<EditText> (Resource.Id.txtAvaliador);
txtPraga = FindViewById<EditText> (Resource.Id.txtPraga);
txtDescricao = FindViewById<EditText> (Resource.Id.txtDescricao);
txtTalhao = FindViewById<EditText> (Resource.Id.txtTalhao);
//Obtém casos TextView objeto
shMsg = FindViewById<TextView> (Resource.Id.shMsg);
//Obtém instância ListView objeto
listItems = FindViewById<ListView> (Resource.Id.listItems);
//Define a propriedade mensagem classe de banco de dados a instância shMsg TextView
shMsg.Text = sqldb.Mensagem;
//Cria ImageButton evento click para imgAdd, ImgEdit, imgDelete e imgSearch
imgAdd.Click += delegate {
//Chama uma função addRecord para adicionar um novo registro
sqldb.AddRegistro (txtProdutor.Text, txtSafra.Text, txtPropriedade.Text,
txtPlano.Text, txtAvaliador.Text, txtPraga.Text,
txtDescricao.Text,txtTalhao.Text);
shMsg.Text = sqldb.Mensagem;
txtProdutor.Text = txtSafra.Text = txtPropriedade.Text = txtPlano.Text =
txtAvaliador.Text = txtPraga.Text = txtDescricao.Text = txtTalhao.Text = "";
GetCursorView();
};
imgEditar.Click += delegate {
int iId = int.Parse(shMsg.Text);
//Chama a função UpdateRecord para atualizar um registro existente
sqldb.AlterarRegistro (iId, txtProdutor.Text, txtSafra.Text,
txtPropriedade.Text, txtPlano.Text, txtAvaliador.Text, txtPraga.Text,
txtDescricao.Text,txtTalhao.Text);
shMsg.Text = sqldb.Mensagem;
txtProdutor.Text = txtSafra.Text = txtPropriedade.Text = txtPlano.Text =
txtAvaliador.Text = txtPraga.Text = txtDescricao.Text = txtTalhao.Text = "";
GetCursorView();
};
imgDeletar.Click += delegate {
int iId = int.Parse(shMsg.Text);
//Chama a função DeleteRecord para apagar o registro associado ao parâmetro id
sqldb.DeletarRegistro (iId);
shMsg.Text = sqldb.Mensagem;
txtProdutor.Text = txtSafra.Text = txtPropriedade.Text = txtPlano.Text =
txtAvaliador.Text = txtPraga.Text = txtDescricao.Text = txtTalhao.Text = "";
GetCursorView();
};
imgBuscar.Click += delegate {
//Chama a função GetCursorView para pesquisar todos os registros ou registro
único de acordo com critérios de pesquisa
string sqldb_column = "";
if (txtProdutor.Text.Trim () != "")
{
sqldb_column = "Produtor";
GetCursorView (sqldb_column, txtProdutor.Text.Trim ());
} else
if (txtPropriedade.Text.Trim () != "")
{
sqldb_column = "Propriedade";
GetCursorView (sqldb_column, txtPropriedade.Text.Trim ());
} else
if (txtTalhao.Text.Trim () != "")
{
sqldb_column = "Talhao";
GetCursorView (sqldb_column, txtTalhao.Text.Trim ());
} else
{
GetCursorView ();
sqldb_column = "Todos";
}
shMsg.Text = "Buscar " + sqldb_column + ".";
};
//Adicionar manipulador de eventos ItemClick a instância ListView
listItems.ItemClick += new EventHandler<AdapterView.ItemClickEventArgs>
(item_Clicked);
}
//Lançada quando um item de ListView é clicada
void item_Clicked (object sender, AdapterView.ItemClickEventArgs e)
{
//Obtém instância do objeto TextView de Layout record_view
TextView shId = e.View.FindViewById<TextView> (Resource.Id.Id_linha);
TextView shPraga = e.View.FindViewById<TextView> (Resource.Id.Praga_linha);
TextView shDescricao = e.View.FindViewById<TextView> (
Resource.Id.Descricao_linha);
TextView shProdutor = e.View.FindViewById<TextView> (
Resource.Id.Proprietario_linha);
TextView shPropriedade = e.View.FindViewById<TextView> (
Resource.Id.Propriedade_linha);
TextView shTalhao = e.View.FindViewById<TextView> (Resource.Id.Talhao_linha);
//Lê os valores e conjuntos de instâncias de objetos EditText
txtPraga.Text = shPraga.Text;
txtDescricao.Text = shDescricao.Text;
txtProdutor.Text = shProdutor.Text;
txtPropriedade.Text = shPropriedade.Text;
txtTalhao.Text = shTalhao.Text;
//Exibe mensagens para operações CRUD
shMsg.Text = shId.Text;
}
//Obtém a exibição cursor para mostrar todos os registros
void GetCursorView()
{
Android.Database.ICursor sqldb_cursor = sqldb.GetRecordCursor ();
if (sqldb_cursor != null)
{
sqldb_cursor.MoveToFirst ();
string[] from = new string[]
{"_id","Praga","Descricao","Produtor","Propriedade","Talhao" };
int[] to = new int[] {
Resource.Id.Id_linha,
Resource.Id.Praga_linha,
Resource.Id.Descricao_linha,
Resource.Id.Proprietario_linha,
Resource.Id.Propriedade_linha,
Resource.Id.Talhao_linha
};
//Cria um SimpleCursorAdapter para ListView objeto
SimpleCursorAdapter sqldb_adapter = new SimpleCursorAdapter (this,
Resource.Layout.Lista_Itens, sqldb_cursor, from, to);
listItems.Adapter = sqldb_adapter;
}
else
{
shMsg.Text = sqldb.Mensagem;
}
}
//Obtém a exibição cursor para mostrar registros de acordo com critérios de pesquisa
void GetCursorView (string sqldb_column, string sqldb_value)
{
Android.Database.ICursor sqldb_cursor = sqldb.GetRecordCursor
(sqldb_column, sqldb_value);
if (sqldb_cursor != null)
{
sqldb_cursor.MoveToFirst ();
string[] from = new string[]
{"_id","Praga","Descricao","Produtor","Propriedade","Talhao" };
int[] to = new int[]
{
Resource.Id.Id_linha,
Resource.Id.Praga_linha,
Resource.Id.Descricao_linha,
Resource.Id.Proprietario_linha,
Resource.Id.Propriedade_linha,
Resource.Id.Talhao_linha
};
SimpleCursorAdapter sqldb_adapter = new SimpleCursorAdapter (this,
Resource.Layout.Lista_Itens, sqldb_cursor, from, to);
listItems.Adapter = sqldb_adapter;
}
else
{
shMsg.Text = sqldb.Mensagem;
}
}
protected override void OnStart ()
{
base.OnStart ();
Log.Debug (tag, "OnStart Chamado");
}
// OnResume é chamado toda vez que a atividade começa, então vamos colocar nossas
RequestLocationUpdates
// Código aqui, de modo que
protected override void OnResume ()
{
base.OnResume ();
Log.Debug (tag, "OnResume Chamado");
// inicializar locação
locMgr = GetSystemService (Context.LocationService) as LocationManager;
btLocalizar.Click += delegate {
//btLocalizar.Text = "GPS";
// Passar no provedor (GPS),
// O mínimo de tempo entre as atualizações (em segundos),
// A distância mínima que o usuário precisa mover-se para gerar uma
atualização (em metros),
// E um ILocationListener (lembre-se que esta classe impletents a interface
ILocationListener)
locMgr.RequestLocationUpdates (LocationManager.NetworkProvider, 2000, 1, this);
};
}
protected override void OnPause ()
{
base.OnPause ();
// Parar de enviar atualizações de localização quando o aplicativo vai para o fundo
// Para aprender sobre a atualização do local em segundo plano,
consulte o guia de backgrounding
// Http://docs.xamarin.com/guides/cross-platform/application_
fundamentals/backgrounding/
// RemoveUpdates leva uma intenção pendente - aqui, nós passamos a atividade atual
locMgr.RemoveUpdates (this);
Log.Debug (tag, "A localização parou porque a aplicação está entrando no fundo");
}
protected override void OnStop ()
{
base.OnStop ();
Log.Debug (tag, "OnStop Chamado");
}
public void OnLocationChanged (Android.Locations.Location location)
{
Log.Debug (tag, "Localização mudou");
latitude.Text = "Latitude: " + location.Latitude.ToString();
longitude.Text = "Longitude: " + location.Longitude.ToString();
provedor.Text = "Provedor: " + location.Provider.ToString();
}
public void OnProviderDisabled (string provider)
{
Log.Debug (tag, provider + " desabilitado pelo usuário");
}
public void OnProviderEnabled (string provider)
{
Log.Debug (tag, provider + " habilitado pelo usuário");
}
public void OnStatusChanged (string provider, Availability status, Bundle extras)
{
Log.Debug (tag, provider + " disponibilidade mudou para " + status.ToString());
}
}
}