entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

[Android] Obtener un elemento de un HashMap

Hola a todos, verán, yo soy nuevo en esto de Java, mi pregunta es esta:
Hay un formulario y todos los datos que se ingresen los guarda en un HashMap, pero esto se usa en una Interface:

@Override
    public HashMap get_data() {
        validate_data();
        if (validate_data()) {
            HashMap<String, Object> a_hash = new HashMap<>();
            a_hash.put("amount", credits);
            a_hash.put("type", paymentCardTypeSpinner.getSelectedItem().toString());
            a_hash.put("expire_month", paymentDateMonthSpinner.getSelectedItem().toString());
            a_hash.put("expire_year", paymentDateYearSpinner.getSelectedItem().toString());
            a_hash.put("cvv2", paymentSecNumberEditText.getText().toString());
            a_hash.put("first_name", paymentNameEditText.getText().toString());
            a_hash.put("last_name", paymentLastNameEditText.getText().toString());
            a_hash.put("number", paymentCardNumberEditText.getText().toString().replaceAll("\\s+",""));
            return a_hash;
        } else
            return new HashMap();
    }

Esta es la Interface:

public interface SomeView {

    HashMap get_data();
    void set_data(HashMap a);
    void alert(String s);

    void dismis_progress();

    void add(HashMap params);

    void add(ContentModel content);
}

Bien, para poder obtener esos datos en la misma clase es a_hash.get("first_name"), pero ahora para obtenerlos de otra clase no tengo idea como hacerlo, supongo que ah de ser sencillo y una disculpa si es así, eh implementado la interface y colocado sus métodos pero no se como hacer uso de todos o algunos de los datos.
Muchas gracias y vuelvo a repetir, una disculpa.

2 Respuestas

0voto

userTemp Puntos830

Gracias a la respuesta de @Javi2EE hice lo siguiente:

 public transPayment(PaymentView _activity){
        activity = _activity;
}

public void createSerialNumber(){
        HashMap a = activity.get_data();
        Log.d(TAG,"datos" + a.toString());
        userDataCard = new UserCard(a.get("first_name").toString(),
                a.get("number").toString(),
                a.get("cvv2").toString(),
                a.get("expire_month").toString(),
                a.get("expire_year").toString());

        token.create(userDataCard);
    }

0voto

Peter comentado

Gracias por compartir la solución!

3votos

Javi2EE Puntos6630

Hola no se sí llego tarde, si he entendido la pregunta lo que quieres es tener acceso al map desde otra clase que no sea la propia que contiene el hashmap.antes de nada para que nos entendamos siempre que se quiera utilizar una interfaz debe existir una implementación a esa interfaz, que digamos es la que se encarga de "rellenar" esos métodos, la interfaz nos dice que hace una clase y la implementación se encarga de decidir el como debe hacerlo, en este caso no conozco cual es el nombre de tu implementación pero será aquel que has asignado a la clase donde has implementado el método get_data, la llamare someImpl.( el nombre de la clase donde tengas escrito el primer trozo de código que has compartido)
Aclarados esto si quieres tener acceso a ese map desde una clase cualquiera la manera más correcta de hacerlo es declarar un objeto con el tipo de la interfaz e instanciarlo con el de la implementación, parece lioso pero es muy sencillo. Tendrías que hacer esto

public class CualquierClase{
   ...
   SomeView var1 = new SomeImpl();//declaramos la interfaz pero instanciamos con new la implementación, instanciar es crear un nuevo objeto utilizando la palabra reservada new

   HashMap data = var1.get_data();//este sería la forma de obtener el hashmap y asignarlo a una variable que hemos declarado
   Object valor = var1.get_data().get("first_name");// también se pueden encadenar métodos y obtener directamente el valor que buscamos sin necesidad de declarar el mapa

}

Además, ajeno a la pregunta, a modo de buenas prácticas de programación hay una serie de convenciones respecto al nombramiento de métodos y variables, en java casi nunca se utiliza el guión bajo (solo para nombrar constantes formadas por más de una palabra o para los tipos enumerados) en lugar de eso cada palabra nueva se empieza por mayúscula, por lo que en java en lugar de llamarlo get_data sería más correcto utilizar getData al igual que setData o validateData, en las constantes y los enum se utiliza el guión bajo porque por convención se escriben en mayúscula y la barra baja facilita la lectura, por ejemplo

private final double NUMERO_PI = 3.14;

public double getNumeroPi(){
...
}

Esto es opcional pero te facilitara la vida tomar estas costumbres para cuando tengas que leer código de otra persona o que alguien lea el tuyo :)

Venga mucho ánimo y un saludo

1voto

userTemp comentado

Gracias por tu respuesta, de hecho así pensé que funcionaría, pero no me funcionaba, por eso decidí preguntar, pero se te agradece amigo porque me diste ideas :D.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta