Iniciar sesión

Ver la versión completa : Por favor alguien me ayuda con programacion android?



Neodreamer
20/11/2012, 23:23
Hola, ando apurado por que tengo que hacer una aplicacion de android y por falta de tiempo no he podido aplicarme todo lo que querria y necesitaria.

Por favor, ruego que el que sepa me eche un cable a ver si lo saco adelante. Tengo que entregarlo para enero y me veo bloqueadisimo.

La parte que me trae de cabeza ahora es un layout, q muestre una lista con dos campos que debo recuperar de una base de datos propia de la aplicacion.
Esta base de datos, tendra varios campos mas y una imagen por cada fila de campos.

Una vez seleccione en la lista el elemento que quiera, se debera de mostrar la totalidad de campos e imagen que le correspondan.

Os pongo ejemplo:

La base de datos almacena, nombre de perro, raza, tamaño, telefono y una foto suya.

La lista del layout principal mostrara solo el nombre y raza de todos los perros de la lista, para que posteriormente al pulsar sobre uno de ellos, en otro layout me muestre todos los campos correspondientes y la foto del perro que hayamos seleccionado.

El caso es q me lia mucho el tema de si uso listview, o muchos textview... xq para colmo en bases de datos ya si que ando totalmente pez....

Por favor, alguien me podria ayudar?

Muchas gracias

^MiSaTo^
20/11/2012, 23:58
Leete esto (http://developer.android.com/training/notepad/index.html) que te servirá como base para lo que quieres hacer (es parecido pero más simple), en especial mírate el código de los ejercicios que vienen

Neodreamer
21/11/2012, 00:08
Gracias Misato, me pongo a ello a ver si saco algo en claro ;)

IronArthur
21/11/2012, 08:38
deberes de clase? :D

Salu2

Neodreamer
21/11/2012, 12:46
Algo asi...algo bastante caros que no quiero sentirme como si hubiera tirado un dinero que no tengo y debo entregar en enero para el titulo...sino. Dinero que habre mal empleado.

@Misato, anoche mire el ejemplo 1 y 2 del notepad y aunq me va a costar entender bien, creo q efectivamente es mas o menos lo que necesito para ese apartado. Gracias

IronArthur
21/11/2012, 12:57
Si tienes alguna duda más concreta de layouts ya sabes, es de lo más importante para programar en android (para mi)

Salu2

Neodreamer
21/11/2012, 13:26
Ok, muchas gracias. Lo estoy haciendo por las noches en la biblioteca q es cuando unico puedo, a medida que vaya creando los layout os voy contando. Muchisimas gracias

Otra duda mas sencilla.
Cuando la aplicacion genera una base de datos, si la pruebo en el terminal (el movil), donde la guarda o ubica?
Y una vez borro la aplicacion, la borra tambien o es un archivo db aparte que debere borrar yo si no la vuelvo a usar?

edit: respecto a la primera pregunta, creo entender q el sistema seria un listview que recupere de la base de datos 2 de los 5 campos y lo muestre seguidos en el mismo textview de la lista. Luego con el onclicklistener abriria otro layout y volveria a recuperar el resto de campos, pero esta parte la veo más compleja, sobre todo al tener q diferenciarlos. Imagino q recuperaria de uno en uno en 4 textview y 1 imageview.

IronArthur
21/11/2012, 13:42
La bd se guarda en la parte protegida del SO, sino recuerdo mal /data/data/nombredetuaplicacion/databases/

Por tu 2ª pregunta creo que no sabes mucho de bbdd. cuando selecciones un elemento del listview obtendrás un identificador del perro/Raza que has escogido, con id tienes que mirar en un tabla de la bbdd toda la información de ese perro, debería estar todo en una misma "linea" en plan

ID nombre tfno foto
2 pastor 767u868 <foto>

Y luego tendrías que tener que poner cada elemento en un campo del layout de muestra textview etc...

Salu2

Neodreamer
21/11/2012, 14:01
Pero no se puede con el query separar los campos? o como los separas despues para asignarselos a los textview individuales?
Creo entender q lo q me dices es q al leer en base a la _ID, me dara todo en la misma linea...

Yo pensaba recuperar solo los 2 campos referenciados con la _ID para el listview y que los mostrase juntos como tu has puesto, pero el problema estara despues al pulsar sobre cada Linea del listview y tener q recuperar todos los campos y separarlos en el nuevo layout y multiples textview

edit: ah, y si! efectivamente las bases de datos son mi punto debil. Hace ya 12 años que hice lo poco que se de programacion en un sitio que se llamaba cibernos en madrid, que en principio era todo programacion y cambiaron de director en el segundo año y metieron todo bases de datos...cuando me vi con select...where y demas en sql, lo deje...xq estaba pagando por algo que no era lo q inicialmente nos habian ofrecido.
Lo cierto es q ahora me arrepiento ya q se usan para casi todo.

IronArthur
21/11/2012, 14:07
Mmmmmm una tabla de una bbdd puede tener multiples campos.

Creo que estás usando el tema de android de bbdd simples : campo - valor

Nunca lo he llegado a usar si es lo que yo pienso, me suena de oídas. Tu para este caso tienes que crear una tabla en la bbdd con multiples campos (id, nombre, tfno, rutafoto)

Salu2

Neodreamer
19/12/2012, 17:06
Buenas, poco a poco voy avanzando. Ya creo la base de datos, la muestro en el listview a traves de un cursor, añado campos nuevo con un boton, pero ahora quiero que al pulsar sobre un elemento se me habra otra activity donde editar los campos de esa fila de la base de datos. El problema es q me dice q OnItemClickListener no se puede usar con cursoradapter...o algo asi.
Por favor, ayuda, tengo que acabar antes del 7 de enero y voy piyadisimo...este año los reyes me traeran carbon y un paño para llorar. Jjajajaja


void rellenarListView(){
Cursor c=db.obtenerNotas();
startManagingCursor(c);
String[] desde = new String[] {SqLiteHelper.KEY_ID,SqLiteHelper.KEY_TITULO,SqLit eHelper.KEY_CUERPO};
int[] hasta = new int[] {R.id.tvId, R.id.tvTitulo, R.id.tvCuerpo};
SimpleCursorAdapter notes=new SimpleCursorAdapter(this,R.layout.listview_item, c, desde, hasta);
setListAdapter(notes);
}

notes.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> a, View v, int position, long id){
Toast.makeText(getApplicationContext(),"Hola",Toast.LENGTH_SHORT).show();
}
});


El ejemplo es de como recupero los datos de la base de datos al cursor, este a la lista y luego el onclicklistener para mostrar un simple toast y ver que funciona. Ya despues ire añadiendo poco a poco.

^MiSaTo^
19/12/2012, 17:12
Buenas, poco a poco voy avanzando. Ya creo la base de datos, la muestro en el listview a traves de un cursor, añado campos nuevo con un boton, pero ahora quiero que al pulsar sobre un elemento se me habra otra activity donde editar los campos de esa fila de la base de datos. El problema es q me dice q OnItemClickListener no se puede usar con cursoradapter...o algo asi.
Por favor, ayuda, tengo que acabar antes del 7 de enero y voy piyadisimo...este año los reyes me traeran carbon y un paño para llorar. Jjajajaja


void rellenarListView(){
Cursor c=db.obtenerNotas();
startManagingCursor(c);
String[] desde = new String[] {SqLiteHelper.KEY_ID,SqLiteHelper.KEY_TITULO,SqLit eHelper.KEY_CUERPO};
int[] hasta = new int[] {R.id.tvId, R.id.tvTitulo, R.id.tvCuerpo};
SimpleCursorAdapter notes=new SimpleCursorAdapter(this,R.layout.listview_item, c, desde, hasta);
setListAdapter(notes);
}

notes.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> a, View v, int position, long id){
Toast.makeText(getApplicationContext(),"Hola",Toast.LENGTH_SHORT).show();
}
});


El ejemplo es de como recupero los datos de la base de datos al cursor, este a la lista y luego el onclicklistener para mostrar un simple toast y ver que funciona. Ya despues ire añadiendo poco a poco.

Mirate again el ejemplo del notepad que te dije, que hacen precisamente lo que tú quieres. Hace meses que no toco android y de memoria no te se decir ahora mismo

Neodreamer
19/12/2012, 17:18
Gracias Misato, como siempre, aunque sea al menos por responder.
Puf, lo he mirado pero me queda grande y como un tonto el año pasado pague un pastizal por este curso a distancia...y ahora me jode no conseguir el titulo mas que sea.
Seguire mirando a ver que saco en claro

juanvvc
19/12/2012, 17:38
El OnItemClickListener no se lo tienes que poner al adapter, porque éste es un adaptador de datos a un View. Solo los Views pueden tener escuchadores de eventos de itnerfaz gráfica porque para eso son clases de interfaz gráfica.

Ahora no recuerdo si el OnItemClickListener se lo tienes que poner al ListView, o al View que se esté metiendo dentro del ListView. Probablemente, al ListView.

-----Actualizado-----

Te lo confirmo: el OnItemClickListener se lo pasas al ListView.

De todas formas, tal como veo tu código, creo que estás extendiendo un ListAcitivity. ListAcitivity ya tiene un método para responder a este evento sin necesidad de que registres nada, así que simplemente reescribe el método que tiene el propio ListActivity.



public void onListItemClick(ListItem l, View v, int position, long id){
Toast.makeText(getApplicationContext(),"Hola",Toast.LENGTH_SHORT).show();
}

^MiSaTo^
19/12/2012, 18:23
Solo los Views pueden tener escuchadores de eventos de itnerfaz gráfica porque para eso son clases de interfaz gráfica.


Solo los Views pueden tener escuchadores de eventos de itnerfaz gráfica porque para eso son clases de interfaz gráfica.


escuchadores
[Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh]

PD: cada vez que traducís términos técnicos al español, dios mata un gatito. Tenedlo en cuenta xD

Neodreamer
19/12/2012, 18:27
Gracias,lo consegui de forma parecida...luego pongo el codigo. Consegui que me mostrara la posicion en lista asique si ahora se la paso como bundle (creo) a la nueva activity y desde alli leo la base de datos en base a la id=posicion de lista, tendeia casi hecho esto no?

juanvvc
19/12/2012, 18:59
[Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh][Ahhh]

PD: cada vez que traducís términos técnicos al español, dios mata un gatito. Tenedlo en cuenta xD

Jeje. Pues esta clase la doy en catalán, así que las palabras que uso normalmente son aún más raras :D

^MiSaTo^
19/12/2012, 19:12
Jeje. Pues esta clase la doy en catalán, así que las palabras que uso normalmente son aún más raras :D

Hombre pero podrás decir Listener no? xD Hay cosas que no se deben traducir de verdad xD

juanvvc
19/12/2012, 19:19
La verdad es que si lo pienso bien, normalmente digo listener en cualquier idioma. No sé por qué se me habrá escapado el escuchador de antes, será algún tic raro. En mi defensa, me estaba durmiendo y justo despuès de escribir el mensaje me he ido a por un café :D

otto_xd
19/12/2012, 19:28
Gracias,lo consegui de forma parecida...luego pongo el codigo. Consegui que me mostrara la posicion en lista asique si ahora se la paso como bundle (creo) a la nueva activity y desde alli leo la base de datos en base a la id=posicion de lista, tendeia casi hecho esto no?

Es una de las formas mas normales de hacerlo
En la funcion del evento de pulsacion sobre elemento de una lista (misato, mejor asi? :P) formas el intent para llamar al activity que mostrara los datos, y pasas como extra algo que te sirva para recuperar toda la informacion de la base de datos (o pasas toda la informacion como extras, a mi no me gusta, pero lo he visto)

Neodreamer
19/12/2012, 19:30
Otra duda q no le veo mucha logica pero bueno. Xq para usar mapas hay q configurar eclipse con las api de google y cuando son otro tipo de aplicaciones con la version del sistema a emular?
Es decir, yo ahora que tengo que añadir la opcion de mapas, que debo hacer, poner la api de google 17 creo, y con eso y las keys del google map valdria? Es un poco lioso...jejeje

juanvvc
19/12/2012, 19:36
No me he enterado de nada de la pregunta :D

Si quieres y te lías con las claves de google (que son un lío, sin duda), puedes intentar usar openstreetmap. La API es totalmente compatible a nivel de código, así que todas las líneas de código que escribras serán exactamente las mismas en googlemaps y openstreetmaps. Así que si mañana quieres usar googlemaps, simplemente cambias la librería que importas y ya está.

La ventaja de usar openstreetmap, aparte de que es un proyecto libre y colaborativo, es que no tienes que liarte con las claves de google y puedes centrarte en que simplemente funcione. Cuando usas las de Google a veces no sabes si no funciona porque has hecho algo mal o es que estás usando la clave incorrecta.

Aquí un tutorial: http://androcode.es/2012/06/osmdroid-introduccion-a-openstreetmap-en-android-osm-parte-i/

otto_xd
19/12/2012, 19:39
Nopes, una cos es el nivel de API que uses para programar tu aplicacion android, que determina las cosas que puedes usar, como metodos, sensores (si los tiene el hw), etc.

Otra es el api key de google maps, que es necesario para poder usar los mapas, ya sea en Android, o desde un navegador web cuando lo usas en tu aplicacion.

El ejemplo del sdk y la documentacion de android developers lo especifica bien, y de memoria creo recordar que te dicen como usar el api1 y el api2 de google maps.

Saludos

Neodreamer
19/12/2012, 19:58
Nada, ya tengo la clave...sigo avanzando poquito a poquito... a ver si va saliendo. Gracias por todo. Os seguire contando como va esto, que me da q si sale va a ser cutre cutre la version 0.1 jajajaja

otto_xd
19/12/2012, 19:59
Nada, ya tengo la clave...sigo avanzando poquito a poquito... a ver si va saliendo. Gracias por todo. Os seguire contando como va esto, que me da q si sale va a ser cutre cutre la version 0.1 jajajaja
Lo importante es que salga, aunque sea cutre, y que le des duro ;)

juanvvc
19/12/2012, 20:08
Recuerda que la clave de google mientras están desarrollando la aplicación es distinta a la clave cuando la publicas, no se te olvide cambiarla.

Neodreamer
19/12/2012, 20:32
Eso es lo otro que no entendia muy bien. Cuando llegue el caso os consultare, xq eso de tener dos claves, una de debug y otra de publicacion...jejeje

p.d: que raro, ahora no me funciona lo del toast...ha sido meter el mapa en la tercera activity y de pronto sin fallo ninguno dejar de funcionar el onclick


protected void onListItemClick(ListView listView,View view,int position,long id){
super.onListItemClick(listView, view, position, id);
Object o = getListAdapter().getItem(position);
Toast.makeText(this, "Selección: "+ Integer.toString(position),Toast.LENGTH_LONG).show ();
}



edit: vale, estas son las cosas que me fastidian de verdad... En el AVD me funciona, pero en el S3 falla lo del onclick y el toast. Algo habran cambiado los de google xq el proyecto del curso tiene que ser en 2.2 y el S3 va con 4.1.2 y no funciona igual...me cawen...

edit 2: Acabo de probar en un xperia play con 2.3.4 y si salen bien los toast cuando pulso sobre el elemento de la lista...y ahora? como lo soluciono? jajajaja

firesign
19/12/2012, 21:27
Eso es lo otro que no entendia muy bien. Cuando llegue el caso os consultare, xq eso de tener dos claves, una de debug y otra de publicacion...jejeje

p.d: que raro, ahora no me funciona lo del toast...ha sido meter el mapa en la tercera activity y de pronto sin fallo ninguno dejar de funcionar el onclick


protected void onListItemClick(ListView listView,View view,int position,long id){
super.onListItemClick(listView, view, position, id);
Object o = getListAdapter().getItem(position);
Toast.makeText(this, "Selección: "+ Integer.toString(position),Toast.LENGTH_LONG).show ();
}



edit: vale, estas son las cosas que me fastidian de verdad... En el AVD me funciona, pero en el S3 falla lo del onclick y el toast. Algo habran cambiado los de google xq el proyecto del curso tiene que ser en 2.2 y el S3 va con 4.1.2 y no funciona igual...me cawen...

edit 2: Acabo de probar en un xperia play con 2.3.4 y si salen bien los toast cuando pulso sobre el elemento de la lista...y ahora? como lo soluciono? jajajaja

Pues si que es raro, porque un Toast es lo mas simple de Android, y no ha cambiado con el tiempo. Vamos, que yo tengo varios programas publicados y alguno en camino y muestro Toast en todos ellos, y funcionan en todas las versiones de Android, incluidas las más modernas...

Neodreamer
19/12/2012, 21:35
Se me ha acabado la bateria de portatil...luego pruebo a generar el apk con una version superior de las api a ver...

edit: increible el xq fallaba. Tenia desactivadas las notificaciones ...yo pensaba q los toast eran mensajes internos a la aplicacion,no notificaciones en plan spam o de barra de notificaciones. Pues he desactivado un monton para ahorrar bateria...si x eso pueden fallar las aplicaciones,para q dan la opcion estos de google...

juanvvc
19/12/2012, 22:09
De todas formas, si estás usando los Toast para notificaciones tuyas de desarrollo y saber cuándo pasa por un punto, casi mejor utiliza el objeto Log y esas notificaciones te llegan a Eclipse con un control mucho mayor y sin fallos o esperas en la pila de Toast.

otto_xd
20/12/2012, 19:45
No pongas solo la funcion para el evento on click, pon la declaracion, que puede que sea lo que este mal.

Y si, acostumbrate a usar Log.v Log.d Log.i Log.e (y como se deben de usar, tienen un orden de importancia), es lo mejor SIEMPRE, y puedes ver el flujo de tu codigo el logcat de una forma muy comoda.

Y volviendo a los logs, si los usas con su nivel, usando filtros puedes ver todo lo importante de una pasada.

Neodreamer
02/01/2013, 20:08
Vale nueva duda...y ya me queda muy poco tiempo para la fecha de entrega...estoy de los nervios.

Ya estoy con los mapas, el tema es que si hago un onTap en el mapa, puedo mostrar un Toast que me de las coordenadas...
Tambien he hecho de forma alternativa (no a la vez) que al hacer onTap sobre 3 puntos ya creados, me saque un texto en toast predefinido...

Lo que yo necesito es que si hago onTap en el mapa, me dibuje uno de mis marcadores y se vaya a otra activity y si ya hay un marcador, que se abra otra activity de edicion sin crear una nueva... Realmente seria la misma activity, ya que desde esta, podre crear o editar...pero como detecto en el plano si ya hay o no algo?

Please...estoy atascado...Gracias

juanvvc
02/01/2013, 20:13
En ese caso no capturas el onTap del mapa, sino que tienes que crear (extend) un marcador personalizado y capturas el onTap u onClick, no recuerdo, sobre el marcador personalizado.

Alternativamente, en el onTap del mapa podrías comprobar todos los marcadores existentes. Si la distancia del punto clickado a un marcador es menor que loquesea, entonces asume que ése marcador ha sido seleccionado. (Loquesea debería depender del zoom del mapa)

Neodreamer
02/01/2013, 23:08
Chuosss, lo de tener en cuenta el zoom me ha matado...estoy cagado...para que me habre metido en semejante lio en lugar de hacerlo por libre...jodido titulo...