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.

Confira os cursos mobile da DevMedia:

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.

Criando novo projeto
Figura 1. Criando novo projeto

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.

Criando nova classe
Figura 2. Criando nova classe

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.

Criando o layout
Figura 3. Criando o layout

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> 
Listagem 2. Lista_Itens.axml

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.

Layout Principal
Figura 4. Layout Principal

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> 
Listagem 3. Main.axml

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());
         }
     }
 }
Listagem 4. MainActivity.cs