LENGUAJE C#
(Android)
ING. FERNANDO SALAS C. MRI
[email protected]SQL
Lite
Inicio
Usamos de base el archive base visto en clases anteriores.
Instalar NuGet
Cargar Nuget para SqlLite
Tenemos actualizaciones
pendientes
Actualizar
Ir a Herramientas/administrador paquetes nuget/Consola
Aparece la consola, probamos el comando get-help NuGet
Actualizando
Obtenemos lista de comandos.
Nos interesa
Update-Package
Ejecutamos y esperamos resultados.
Finalmente
Al final debe cerrar correctamente.
Si la plataforma nos indica que debemos reiniciar .Net lo
autorizamos
fallos
En caso de fallos debemos, una vez que se reinicie .net volver a
ingresar a la consola NuGet.
En caso de que se reporte debe volver a reiniciar .net a veces por
dos o tres veces.
Limpiar solución
Al terminar la ejecución conviene limpiar solución.
CREAR LA TABLA
Creamos la carpeta Model
En ella se guardarán las clases que
usaremos.
Agregamos la clase User
Clase completa
[Table("user")]
class User
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[MaxLength(100), Unique]
public String Username { get; set; }
[MaxLength(100), Unique]
public String Email { get; set; }
[MaxLength(70)]
public String Password { get; set; }
}
Creamos una nueva clase para el
Repositorio
Nombre de la clase:
UserRepository.cs
Agregamos using al inicio
using SQLite;
Completamos la clase
private SQLiteConnection con;
public string EstadoMensaje;
private static UserRepository instancia;
public static UserRepository Instancia public int AddNewUser(string username, string email, string password) {
{ int result = 0;
get try
{ {
if (instancia == null) result = con.Insert(new User {
throw new Exception("Debe llamar al inicializador, acción detenida"); Username =username, Email = email, Password = password
return instancia; });
} EstadoMensaje = string.Format("Cantidad filas : {0}", result);
} }
catch (Exception e)
public static void Inicializador(String filename) { EstadoMensaje = e.Message; }
{ return result;
if (filename==null) { }
throw new ArgumentException();
} public IEnumerable<User> GetAllUsers()
{
if (instancia != null ) { try {
instancia.con.Close(); return con.Table<User>();
} } catch (Exception e) {
instancia = new UserRepository(filename); EstadoMensaje = e.Message;
} }
return Enumerable.Empty<User>();
private UserRepository(String dbPath) { }
con = new SQLiteConnection(dbPath);
con.CreateTable<User>();
}
Crear Interfaz de usuario
Cambiamos
StackLayout
dentro del
MainPage.xaml
<StackLayout Orientation="Vertical" Padding="32" Spacing="10">
<Label Text="Principal-2"
HorizontalOptions="Center" FontSize="Large" />
<Entry x:Name="txtUsername" Placeholder="Usuario"/>
<Entry x:Name="txtEmail" Placeholder="Email"/>
<Entry x:Name="txtPassword" Placeholder="Password" IsPassword="True"/>
<Button Text="Agregar nuevo usuario" x:Name="BtnInsert"/>
<Button Text="Obtener usuarios" x:Name="BtnAllUser"/>
<Label x:Name="StatusMessage" FontSize="Medium" />
<ListView x:Name="userList">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Label Text="{Binding Username}" />
<Label Grid.Column="1“ Text="{Binding Email}" />
<Label Grid.Column="2“Text="{Binding Password}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Agregamos la clase FileAccess
Se agrega en el Proyecto
Android
Contenido
Crear GetLocalFilePath
Código
class FileAccess
{
public static string GetLocalFilePath(string filename) {
string path = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
return System.IO.Path.Combine(path, filename);
}
}
Importante
Debe crear una clase FileAcess con
el mismo código, pero en el
Proyecto IOS
Conexión de botones
Vamos a App.Xaml.cs
Y agregamos la referencia
using Base.Model;
Agregamos el status en MainPage.xaml
En MainPage.xaml.cs
Agregamos la referencia a la carpeta de clases:
using Base.Model;
Contenido
Cambiamos el MainPage
public MainPage()
{
InitializeComponent();
BtnAllUser.Clicked += BtnAllUser_Clicked;
BtnInsert.Clicked += BtnInsert_Clicked;
}
Métodos adicionales
private void BtnInsert_Clicked(object sender, EventArgs e)
{
StatusMessage.Text = string.Empty;
UserRepository.Instancia.AddNewUser(txtUsername.Text,txtEmail.Text, txtPassword.Text);
StatusMessage.Text = UserRepository.Instancia.EstadoMensaje;
}
private void BtnAllUser_Clicked(object sender, EventArgs e)
{
var allUsers = UserRepository.Instancia.GetAllUsers();
userList.ItemsSource = allUsers;
StatusMessage.Text = UserRepository.Instancia.EstadoMensaje;
}
Verificamos App.xaml
Modificamos
App.xaml.cs
public App(string filename )
{
InitializeComponent();
UserRepository.Inicializador(filename);
MainPage = new MainPage();
}
Debemos modificar el AppDelegate.cs
Cambiamos las líneas
String dbPath = FileAccess.GetLocalFilePath("users.db3");
LoadApplication(new App(dbPath));
Cambiamos MainActivity.cs
String dbPath = FileAccess.GetLocalFilePath("users.db3");
LoadApplication(new App(dbPath));
Resultado