elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Al recorrer un Array solo obtengo el último valor.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Al recorrer un Array solo obtengo el último valor.  (Leído 2,164 veces)
joak

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Al recorrer un Array solo obtengo el último valor.
« en: 14 Agosto 2018, 20:14 pm »

Tengo un método en el que va el siguiente bucle:
for (int i=0; i<geofenceTransitionDetails.length; i++) {   
     enviarDatos(geofenceTransitionDetails);
}

El método enviarDatos es el siguiente:
private void enviarDatos(String nombreNoti) {

    ArrayList<String> sortedKeys = new ArrayList<String>(TITULO_LANDMARKS.keySet());

    for(int x=0;x<sortedKeys.size();x++) {
        if(sortedKeys.get(x).equals(nombreNoti)) {
            titulo=TITULO_LANDMARKS.get(sortedKeys.get(x).);
      break;
        }

    }

    sendNotification(nombreNoti,titulo);
}
En él comparo las claves de un HashMap (TITULO_LANDMARKS)con el String  nombreNoti y si coinciden obtengo el valor del HashMap (titulo).
Una vez obtenido lo envío al método sendNotification. Que consiste en lo siguiente:
private void sendNotification(String nombreNotification, String tituloPasado) {

...
.setContentTitle(nombreNotification)
.setContentText(tituloPasado)
...

El problema surge cuando ejecuto el código y recibo la notificación (pues de una notificación de Android se trata), .setContentTitle(nombreNotification)lo recibo correctamente, serían (tres notificaciones en mi prueba):

Tapas y comida rápida El Puchero
Alojamiento Alexis
Alojamiento Alonso de Ojeda

El problema surge con .setContentText(tituloPasado)en el que recibo siempre el mismo valor: "Habitación doble 30 €" que corresponde en la base de datos al último valor (Alojamiento Alonso de Ojeda), quedando de la siguiente manera:

Tapas y comida rápida El Puchero
Habitación doble 30 €

Alojamiento Alexis
Habitación doble 30 €

Alojamiento Alonso de Ojeda
Habitación doble 30 €

Con lo que el problema debe estar en el bucle for de enviarDatos. Por muchas vueltas que le he dado no consigo solucionarlo, así que si alguien pudiera orientarme se lo agradecería mucho.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Al recorrer un Array solo obtengo el último valor.
« Respuesta #1 en: 15 Agosto 2018, 07:09 am »

Si revisas bien el bucle:
Código:
for (int i=0; i<geofenceTransitionDetails.length; i++) {   
     enviarDatos(geofenceTransitionDetails);
}
...usas un iterador 'i', para (se supone que) recorrer un objeto... y tomar de él, algún atributo... que luego DEBERÍA ser usado dentro dle bucle, para hacer lo que sea que se quiera...
En tu caso, vas a 'enviarDatos', pero si miras el partámetro que envías, envías el objeto completo, en vez de algún atributo... por ejemplo:
Citar
  enviarDatos(geofenceTransitionDetails(i).Dato)
Ves que usamos el contador para tomar cada vez el enesimo dato???.
Ahora yo he puesto '.dato', tu sabrás que atributo de dicho objeto será lo que debes enviar...


En línea

joak

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Al recorrer un Array solo obtengo el último valor.
« Respuesta #2 en: 15 Agosto 2018, 21:13 pm »

Lo primero gracias por tu respuesta y tu tiempo.
Lo segundo es que está solucionado,  al depurar he visto lo siguiente:
List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();
String geofenceTransitionDetails1 = getGeofenceTransitionDetails(geofenceTransition, triggeringGeofences);
//String[] geofenceTransitionDetails = geofenceTransitionDetails1.split(",");
String[] geofenceTransitionDetails = geofenceTransitionDetails1.split("\\s*,\\s*");

for (int i=0; i<geofenceTransitionDetails.length; i++) {
    enviarDatos(geofenceTransitionDetails);
}
private void enviarDatos(String nombreNoti) {
    for(int x=0;x<sortedKeys.size();x++) {
        if((sortedKeys.get(x)).equals(nombreNoti)) {
            ti tulo=TITULO_LANDMARKS.get(sortedKeys.get(x));
            break;
        }
    }
El problema estaba en la igualdad sortedKeys.get(x)).equals(nombreNoti) que solo se cumplía para el primer elemento  del array String[] geofenceTransitionDetails y luego dejaba de cumplirse para los demás. Esto era debido por lo que he visto en el debug a que el primer elemento del bucle era por ejemplo:
sortedKeys.get(x) = "Tapas y comida rápida El Puchero". Y
nombreNoti = "Tapas y comida rápida El Puchero"
Pero en el segundo:
sortedKeys.get(x) = "Alojamiento Alexis". Y
nombreNoti = " Alojamiento Alexis". Nota que hay un espacio detrás de las primeras comillas. Esto es debido a que tenía puesto:
[] geofenceTransitionDetails = geofenceTransitionDetails1.split(",");
que dejaba ese espacio entre la coma del primer elemento y el segundo con lo que no se cumplía la igualdad. Así que he eliminado los espacios de la siguiente manera:
String[] geofenceTransitionDetails = geofenceTransitionDetails1.split("\\s*,\\s*");
Gracias otra vez.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como Recorrer un array en C++ ?
Programación C/C++
[GB] 4 26,403 Último mensaje 23 Julio 2010, 23:38 pm
por Eternal Idol
Recorrer Array
Programación C/C++
cobolitros 2 2,975 Último mensaje 7 Julio 2011, 21:08 pm
por leogtz
Problema al recorrer array
PHP
painkillerpucela 2 2,049 Último mensaje 14 Julio 2012, 00:04 am
por Stakewinner00
¿Por qué siempre obtengo un valor de checksum UDP cero? (error)
Redes
chelo87_ec 2 2,715 Último mensaje 16 Septiembre 2013, 04:49 am
por dato000
Recorrer el vector del ultimo al primero | Matlab
Programación General
milx86 4 12,185 Último mensaje 20 Febrero 2015, 05:46 am
por milx86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines