domingo, 18 de mayo de 2014
DBOR Bases de Datos Objecte-Relacionals
Instrucciones basicas en SQL para la creación de objetos y tablas de objetos:
Comentario de texto en SQL se hace con 2 guiones "--" al pricipio de la linea!
1. crear un objeto
-- Para heredar de un objeto creado, se le tiene que especificar "NOT FINAL" .
CREATE OR REPLACE TYPE nom_objeto AS OBJECT (
atributo1 VARCHAR2(123) [, atributo2 NUMBER(2) ] [ ,atributo3 DATE] ,
MEMBER FUNCTION getAtributo1 return VARCHAR2,
MEMBER PROCEDURE setAtributo1(nuevoValor VARCHAR2),
) NOT FINAL ;
Ejemplo, heredar del objeto "nom_objeto":
CREATE OR REPLACE TYPE nom_objeto2 UNDER nom_objeto (
--atributos
--declaración de metodos
);
2. definir los metodos de cada objeto creado :
CREATE OR REPLACE TYPE BODY nom_objeto AS
MEMBER FUNCTION getAtributo1 RETURN VARCHAR AS
--entre "as" y "begin" inicializar variables de esta funcion, si hace falta.
BEGIN
RETURN SELF.atributo1;
END getAtributo;
MEMBER PROCEDURE setAtributo1(nuevoValor VARCHAR2) AS
BEGIN
SELF.atributo1 : = nuevoValor ;
END setAtributo;
END;
3. Crear tabla de este objeto :
CREATE TABLE nomTabla OF nom_objeto( PRIMARY KEY(atributo1));
INSERT INTO nomTabla VALUES('valor del atributo1 del objeto' );
INSERT INTO nomTabla VALUES('hola ' );
INSERT INTO nomTabla VALUES('mundooo ' );
SELECT * FROM nomTabla T WHERE T.atributo1 = ' hola ' ;
result :
ATRIBUTO1
---------------------------------------------------
hola
La función VALUE sirve para obtener la misma estructura del tipo de objeto de una tabla. En un select normal se obtiene los valores de los atributos, mietras que utilizando la funcion value() se obtiene el objeto entero .
SELCET VALUE(P) FROM nomTabla P ;
result:
VALUE(P)
---------------------------------------------------
SYSTEM.ATRIBUTO1(' valor del atributo del objeto ')
SYSTEM.ATRIBUTO1(' hola')
SYSTEM.ATRIBUTO1(' mundo ')
martes, 15 de abril de 2014
Core Data en Xcode
Pasos a seguir para crear un proyecto con la configuración para utilizar Core Data
- New > project > Aplication > empty application > Next > seleccina "use coreData".
- Crear el storyBoard : new > file > user interfaces > story board. Ir a la raiz del proyecto y seleccionar en "developer info " > " Main interfaces" selecciona con el desplegable el storyboard. Ir a "appdelegate.m" y en el metodo "application:(UIAplicatio *) application didFinishLaunchingWithOptions:(NSDirectionary *) launchOptions " borrar todo y agregar SOLO "return YES;"
- En el archivo XXXX.xcdatamodel abajo a la derecha esta el icono de "editor style", cambiamos a modo "table grap" (editar las tablas de forma visual)
- Abajo a la izquierda en "add empty" añadimos una entidad (tabla)
- En la derecha vista "Utilidades" en "data model inspector" editamos la tabla. (nom, agregar property con su respectivo tipo... etc.)
- agregar relaciones entre las tablas : cambias el tipo de vista para las tablas, seleccionas la entidad, en "relationShip" con el boton de añadir "+" agregamos una relacion con su nombre, origen , destino (en todas seleccionas la inversa) . Selecciona la relacion (haciendo clic encima para que este en azul) y en la derecha en "type" selecciona "to many " en caso que sea una relacion uno a muchos. (explicacion para tontos: en la entidad con la relacion 1 (uno) tiene que tener una flecha, en la entidad con la relacion n (muchos) tiene que tener 2 flechitas. )
- Crear las clases ".h", ".m" de cada entidad: seleccionas las clases en modo "visual" (que se vean las tablas) , en la parte izquierda de la pantalla en "EMPTIES" , luego New File > CoreData > NSManagerObject Subclass. > next > next
lunes, 17 de marzo de 2014
Table View en Android
La finalidad de este tutorial es poder mostrar en un Activity una lista con las celdas personalizadas .
Puntos importantes :
1. La activity que gestiona los eventos y su layout.xml (tipo de layout que se desea y dentro un listView)
2. La lista (arrayList) que se mostrará en un ListView
3. Una clase Item que es el objeto que corresponde a cada celda de ListView
4 Un Item_Layout , un layout para el item, aqui se define el diseño de cada celda de ListView.
5. Una clase.java (adapter) para adaptar la "lista" (que es un array list de toda la vida) a la listView
--------------------------------------------------------------------------------------------------------
Dicho esto, ya podemos empezar !
1. Crear el Activity (.java) con su vista (.xml) y declararlo en "AndroidManifest.xml"
2.1. Declaramos el objeto "listaView" dentro de la clase ListaCompras, y lo inicalizamos en el metodo "onCreate" de lamisma clase:
2.2. En este ejemplo creamos una simple lista de ejemplo, pero en una App comercial los datos se pueden recuperar de sqlite o un archivo XML.
3. En este caso creamos una case propia "Mi_Item.java" para poder guardar objetos como "un libro" con sus atributos: nombre, autor, precio, nº de edicion etc. Esto en un futuro podremos reciclar el codigo con coco esfuerzo. En caso que solo quieres una lista simpre se puede utilizar el tipo de "Item" o "celda" predeterminada por android "android.R.layout.simple_list_item_1". http://developer.android.com/guide/topics/ui/layout/listview.html
| Se omiten los getters y setters, tienes que ponerlos! |
resumen del punto 3: esta clase "mi_item" es solo un objeto que se mostrará en cada celda de la lista.
4. Creamos la vista personalizada de cada celda (es un layout de toda la vida solo que se repetirá , se puede incluir incluso fragments y dentro más vistas y vistas y botones y spinners y todo lo que quieras xd )
| New>Others>Android XML layout |
| res / layout / mi_item.xml |
5. Creamos el adaptador (una clase.java) extendida de BaseAdapter para poder adaptar la lista de Strings a una ListView:
creamos la clase "Mi_ItemsAdapter.java" extendida de Base Adapter y con los metodos obligatorios que los requiere la clase padre .
Creamos el constructor y los atributos "context" y "items" :
| Los Getters and Setters son obligatorios !!! |
Sobreescribimos los metodos :
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int posicion) {
return items.get(posicion);
}
@Override
public long getItemId(int position) {
return position; //este metodo no lo entiendo
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (convertView == null) {
// Create a new view into the list.
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//para cada fila infla este tipo de item
rowView = inflater.inflate(R.layout.mi_item, parent, false);
}
// Set data into the view.
TextView textoIzquierda = (TextView) rowView.findViewById(R.id.textViewIzquierda);
TextView textoCentral = (TextView) rowView.findViewById(R.id.textViewCentral);
//CheckBox cb= (CheckBox) rowView.findViewById(R.id.checkBoxDerecha);
Mi_Item itemSeleccionado = this.items.get(position);
textoIzquierda.setText(itemSeleccionado.getCantidad());
textoCentral.setText(itemSeleccionado.getDescripcion());
//cb.setSelected(false);
return rowView;
}
// + getters and setters....
Solo queda asignarle este adaptador al ListView de la clase ListaCompras.java y agregar un escuchador del listView
| ListaCompras.java |
Si todo a salido bien .. y con un par de modificaciones en el diseño de la vista, obtenemos este resultado :
![]() |
| Captura de pantalla |
Y listo ! solo queda ejecutar el programa... por si lees esto y estas perdido... se omite la creacion de proyecto y de la clase principal "MainActivity.java". Si no se entiende el tutorial contacte con https://www.facebook.com/ionut.vladasel
viernes, 7 de marzo de 2014
BroadcastReceiver en Android
Un BroadcastReceiver tiene como finalidad indentificar eventos globales que pasan dentro del sistema operativo Android, por ejemplo: recibir un SMS, identificar una llamada entrante, el estado de la bateria, identificar si se cambia de tarjeta SIM... etc. en resumen cuando sucede alguna de las acciones mencionadas anteriormente el OS envia un "mensaje" a todas las Apps.
Cuando sucede un envento global, el sistema operativo Android se encarga de crear el objeto bradcast y al finalizar la ejecucion de su codigo se destruye el objeto. Esto a diferencia de un servicio permite ahorrar bateria, cabe mencionar que un broadcast está diseñado solo para acciones que requieren poco codigo.
Para recordar:
1. Tienes que registrar el boadcast en AndroidManifest.xml y el sistema se encarga de desencadenarlo y gestionarlo.
<reciver android:name=".NombreClaseBroadcastReciver">
<intent-filter>
<action android:name="android. accion que se desea controlar ">
</intent-filter>
</reciver>
2. Se puede registrar en tiempo de ejecución a través del metodo "registerReceiver" de la clase "Context".
3. Carece de interfaz de usuario.
El codigo se ejecuta en el metodo "onReceive".
EJEMPLO :
public class SMS extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*
* las acciones se guardan en el parametro "intent"
*/
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
/*
* accion a realizar en caso de recibir un SMS
*/
}
}
}
Que no se te olvide pedir los permisos para recibir SMS
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Cuando sucede un envento global, el sistema operativo Android se encarga de crear el objeto bradcast y al finalizar la ejecucion de su codigo se destruye el objeto. Esto a diferencia de un servicio permite ahorrar bateria, cabe mencionar que un broadcast está diseñado solo para acciones que requieren poco codigo.
Para recordar:
1. Tienes que registrar el boadcast en AndroidManifest.xml y el sistema se encarga de desencadenarlo y gestionarlo.
<reciver android:name=".NombreClaseBroadcastReciver">
<intent-filter>
<action android:name="android. accion que se desea controlar ">
</intent-filter>
</reciver>
2. Se puede registrar en tiempo de ejecución a través del metodo "registerReceiver" de la clase "Context".
3. Carece de interfaz de usuario.
El codigo se ejecuta en el metodo "onReceive".
EJEMPLO :
public class SMS extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*
* las acciones se guardan en el parametro "intent"
*/
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
/*
* accion a realizar en caso de recibir un SMS
*/
}
}
}
Que no se te olvide pedir los permisos para recibir SMS
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Suscribirse a:
Entradas (Atom)
