Acciones al iniciar y cerrar tu aplicación WP7
Siguiendo con los posts de programación con Windows Phone, explicaremos como crear el evento que se ejecuta cuando se inicia la aplicación y cuando ésta se cierra. Esto es muy útil cuando queremos que la aplicación realice ciertas acciones en esos momentos como por ejemplo cargar variables de un fichero.
Para crear estos eventos deberemos abrir nuestra página App.xaml. En ella deberemos añadir los eventos Startup y Exit como puedes ver a continuación:
<Application
x:Class="wp702.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" Startup="Application_Startup" Exit="Application_Exit">
</Application>El código que hemos añadido es: Startup=”Application_Startup” Exit=”Application_Exit”. A continuación para definir los eventos haremos click derecho encima de cada uno de ellos y seleccionaremos Navigate to Event Handler. Se nos creará el siguiente código:
private void Application_Startup(object sender, StartupEventArgs e)
{
}
private void Application_Exit(object sender, EventArgs e)
{
}Ya tenemos creados nuestros eventos donde podremos insertar el código que necesitemos. Os dejo un ejemplo de evento que crea el fichero datos.xml al iniciar la aplicación si éste no existe.
private void Application_Startup(object sender, StartupEventArgs e)
{
var store = IsolatedStorageFile.GetUserStoreForApplication();
if (store.FileExists("data.xml") == false)
{
IsolatedStorageFileStream rootFile = store.CreateFile("data.xml");
rootFile.Close();
try
{
using (StreamWriter sw = new StreamWriter(store.OpenFile("data.xml", FileMode.Open, FileAccess.Write)))
{
sw.WriteLine(@"<?xml version=""1.0"" encoding=""utf-8""?>");
sw.WriteLine("<root></root>");
}
}
catch { }
}
}
Espero haberos sido de ayuda.
Algunos tutoriales de Windows Phone 7 (Parte 1)
Aquí os dejo algunos tutoriales/ejemplos de programación de aplicaciones para Windows Phone 7. Los he ido encontrando por la nube a medida que buscaba información y he pensado que podrían ser de utilidad.
1. Acceso a datos desde WP7 a tablas MySQL (La Villa Digital, castellano)
2. Tu primera aplicación WP7 (DZone, inglés)
3. Windows Azure (Desarrolloweb.com, castellano)
5. El control Image en WP7 (AndreaHubner.blog.com, inglés)
6. WP7 Developers Tools Released (ScottGu’s Blog, inglés)
7. Enlace de datos en WPF (MSDN Magazine, castellano)
8. Aplicación WP7 de Twitter usando Silverlight (ScottGu’s Blog, inglés)
9. 31 Días con Windows Phone 7 (BlankenBlog, inglés)
10. Añadir control ApplicationBar en WP7 (ginktage.com, inglés)
Espero que os sean de ayuda.
Tutorial de programación para Windows Phone
Como ahora me ha dado por aprender a programar aplicaciones para Windows Phone he estado buscando mucha información sobre el tema. Os dejo un link a un tutorial muy completo en PDF que he encontrado por ahí, me ha parecido muy didáctico e imprescindible ya que la información acerca de este entorno no es que sobre precisamente. A algunos les decepcionará el que esté en inglés pero que se le va a hacer… no pienso ponerme a traducirlo…
Acceso a datos desde WP7 a tablas MySQL
La verdad es que este tema me ha generado bastantes dolores de cabeza y la auséncia de información en Internet me ha llevado a resumiros el procedimiento que he seguido. Espero que os sea de ayuda. Empezamos:
Bien, el primer concepto que debemos tener en cuenta es que no se puede acceder directamente desde vuestra aplicación de WP7 a las tablas MySQL, o eso es lo que he deducido después de buscar información. Necesitaremos crear un servicio WCF que resumiendo torpemente, es la aplicación puente que utilizaremos para acceder a datos externos alojados en la nube. En esta aplicación implementaremos todas las funciones necesárias para recoger o insertar y las llamaremos más tarde desde nuestra aplicación WP7.
El primer paso será crear un proyecto tipo WCF Service Application. Seguidamente descargaremos el Connector MySQL para .NET desde aquí. Después de instalar el fichero descargado tendremos que añadir la referencia a nuestra aplicación WCF de la DLL MySql.Data.dll que se encuentra en mi caso en la ruta C:\Program Files\MySQL\MySQL Connector Net 6.2.4\Assemblies\.
Ahora ya podemos añadir las referencias a la librería en el fichero Service1.svc.cs.
using System.Data;
using System.Data.Sql;
using System.Data.OleDb;
using MySql.Data.MySqlClient;Ahora imeplementaré una función que devolverá un valor de la Base de Datos MySQL recibiendo como parámetro un filtro.
namespace WcfService1
{
public class Service1 : IService1
{
MySqlConnection myConn;
string a;
public string GetData(int value)
{
myConn = new MySqlConnection("user id=usuario; password=contraseña; database=basededatos; server=ipservidor");
myConn.Open();
string[] myList = new string[10];
string strSQL = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA="+value;
MySqlCommand mysqlCmd = new MySqlCommand(strSQL, myConn);
MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
int i = 0;
while (mysqlReader.Read())
{
if (mysqlReader.GetString(1).ToString() != null)
{
a = mysqlReader.GetString(1).ToString();
//myList = mysqlReader.GetString(0).ToString();
}
else
{
a = null;
}
i++;
}
myConn.Close();
return string.Format(a);
}
}
}Esta función devuelve el nombre de una empresa pasándole como parámetro su ID. Es una función chorras pero me sirve para el propósito de este post.
Lo siguiente que haremos será vincular el servicio WCF a una aplicación WP7.
Desde nuestro proyecto WCF si hacemos click derecho encima del proyecto tenemos la opción View in Browser (Ver en navegador), aceptamos y se nos abrirá una página web, copiamos la dirección al clipboard.
Creamos un proyecto tipo Windows Phone Application y iremos a Add Service Reference, solo deberemos pegar la dirección web que habíamos copiado anteriormente y ya tendremos vinculado nuestro servicio web.
Como ejemplo he añadido a la aplicación un boón y una área de texto. En el evento click del boón le pasaremos un parámetro id de empresa al web service y el nombre de empresa que devuelve lo pondremos en el campo de texto de la aplicación móvil.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using WindowsPhoneApplication4.ServiceReference1;
namespace WindowsPhoneApplication4
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Service1Client client = new Service1Client();
client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
client.GetDataAsync(5, client);
}
void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
Service1Client client = e.UserState as Service1Client;
client.GetDataCompleted -= client_GetDataCompleted;
if (e.Error != null)
{
//TODO: Gestionar el error
return;
}
string getDataResult = e.Result;
//getDataResult = "You entered: 5";
textBox1.Text = e.Result;
}
}
}Ya solo queda probar nuestra aplicación. Así de cutre y así de complicado se me ha hecho encontrar este método. Espero haberos sido de ayuda.
**** Actualización 08/04/11 ****
Se ha añadido el código de la aplicación de test de este capítulo. Podréis observar que lo he variado un poco pero es prácticamente el mismo. Además se han añadido algunas capturas de pantalla nuevas para hacer más comprensible el método.
Archivo: MySQLConnection-1.0.zip (Versión 1.0)
**** Actualización 10/05/11 ****
Consulta que devuelve más de un valor
En esta segunda revisión del ejemplo se han añadido las funciones para capturar múltiples valores de un registro de la Base de Datos MySQL. En este ejemplo os muestro como quedaría la función en nuestro servicio WCF.
public List<Models.Empresa> DatosEmpresa2(int idEmpresa)
{
List<Models.Empresa> ListaEmpresas = new List<Models.Empresa>();
myConn = new MySqlConnection(Models.Config.ConnectionString);
myConn.Open();
string Sql = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA=" + idEmpresa;
MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
//int i = 0;
while (mysqlReader.Read())
{
if (mysqlReader.GetString(1).ToString() != null)
{
Models.Empresa Item = new Models.Empresa();
Item.Id = Convert.ToInt32(mysqlReader.GetString("ID_EMPRESA").ToString());
Item.Nombre = mysqlReader.GetString("NOMBRE").ToString();
Item.Actividad = mysqlReader.GetString("ACTIVIDAD").ToString();
Item.Contacto = mysqlReader.GetString("CONTACTO").ToString();
Item.Zona = mysqlReader.GetString("ZONA").ToString();
ListaEmpresas.Add(Item);
}
//i++;
}
myConn.Close();
return ListaEmpresas;
}Archivo: MySQLConnection-2.0.zip (Versión 2.0)
**** Actualización 20/05/11 ****
Consulta de inserción (INSERT)
Aprovecho para colgar una función de inserción en la Base de Datos. Es una función de ejemplo muy simple pero quizá os pueda servir para vuestros propósitos.
public void InsertItem(string Nombre, string Actividad, string Contacto)
{
myConn = new MySqlConnection(Models.Config.ConnectionString);
myConn.Open();
String Sql = "INSERT INTO EMPRESAS (NOMBRE, ACTIVIDAD, CONTACTO) VALUES ( " +
"'" + Nombre + "', '" + Actividad + "', '" + Contacto + "')";
MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
mysqlCmd.ExecuteNonQuery();
}Y este sería el código de la aplicación WP7 que llama a la función de insertar. Está testeado y a mi personalmente me ha funcionado. Es un código muy simple, mediante el evento de un botón se inserta en la BBDD MySQL el valor de 3 campos de texto.
private void InsertButton_Click(object sender, RoutedEventArgs e)
{
Service1Client client = new Service1Client();
client.InsertItemAsync(textBox3.Text, textBox4.Text, textBox5.Text);
}Actualizo el fichero con el código testeado.
Archivo: MySQLConnection-3.0.zip
PD: El proyecto WCF no podréis crearlo sin la plantilla del proyecto instalada y la mala notícia es que no viene con Windows Phone Toolkit. Necesitaréis descargarla o tener el Visual Studio completo.
Mi Manual de Windows Phone
Ultimos Posts
- Windows Phone Developer Tools 7.1 Beta
- Cambia el tema del emulador de Windows Phone
- Algunos tutoriales de Windows Phone 7 (Parte 3)
- Grabador de voz en Windows Phone
- Cambiar teclado de TextBox en WP7
- Sobre el diseño Metro para programadores de WP7
- Base de datos XML en Windows Phone 7
- Windows Phone 7 Isolated Storage Explorer
- Almacenamiento local de datos en Windows Phone
- Uso del control Popup en WP7
Windows Phone
Nuestras lecturas
Windows Phone Blog
Blankenblog
Libre y extremo











