• El patrón arquitectónico MVP, Model View Presenter (Modelo Vista Presentador) lleva en auge desde hace unos años hasta la fecha y el motivo es porque el MVP es un perfecto ejemplo de arquitectura limpia que ga

  • En esta entrada se irán publicando aspectos puntuales, pequeños trucos y trozos de código útiles para Android que he ido descubriendo durante mi experiencia como programador de Android.
    Bloquear el Dra

  • Para optimizar el uso de la memoria, el inyector de dependencias Dagger 2 permite crear subcomponentes con ámbito (scoped subcomponents) cuya finalidad es la de utilizar instancias únicas con ámbito (scoped si

  • (Esta entrada sobre cómo publicar una librería es una traducción del artículo publicado en el blog The Cheese Factory. Podéis consultar el articulo aquí y darle a me gusta en su página de Facebook porque os asegur

  • Girar tu dispositivo ya no será un problema
    En Android, los dispositivos móviles permiten rotar la pantalla y ofrecer un layout distinto según la orientación. La rotación de la pantalla conlleva tener que rest

  • Interfaces, callbacks, listeners, llámalos como quieras, pero úsalos
    Los callbacks funcionan de forma similar a un listener. Cuando tenemos que comunicar dos clases cuya visibilidad es unidireccional, como por e

  • Una vía rápida al JSON
    ¿El mundo de los servicios web siempre te ha parecido algo complicado? Ya es hora de perder ese miedo con la biblioteca Volley para Android. Gracias a esta biblioteca podremos hacer pe

    • Sí, por favor, copia y pega la clase en la que haces la llamada con Volley y explica cuándo se hace la llamada y qué debería devolverte el servicio.

      Si no cabe aquí, mándala a mi correo.

      Aunque así, a bote pronto, se me ocurre que puede que estés intentando insertar un registro con una clave primaria idéntica a uno que ya existe en el servidor y en las clases php no estás contemplando respuesta para este tipo de fallo SQL y devuelves nulo.

      En cualquier casoe no parece ser un error relacionado con Volley, sino con la parte servidora.

    • Si te refieres a los parámetros que van en la ruta, Volley no parece disponer de un método para ello. He estado mirando los métodos de la clase Request de Volley y no parece haber ninguno para que concatene automáticamente los parámetros recibidos en un HashMap a la ruta. A fin de cuentas, es tan fácil como meterlos en la ruta:

      public void enviarPeticionGETConParametros(){
           String url = "http://www.mywebservice.call.service";
           HashMap<String, String> parametros = new HashMap<>();
           parametros.put("parametro1", "valor1");
           parametros.put("parametro2", "valor2");

           String urlConParametros = incluirParametrosAUrl(url, parametros);

           JsonObjectRequest peticion= new JsonObjectRequest(urlConParametros,
               new Response.Listener() {
                   @Override
                   public void onResponse(JSONObject response) {
                       // Hacer algo con el json obtenido
                   }
               },
               new Response.ErrorListener() {
                   @Override
                   public void (VolleyError error) {
                       // Hacer algo con el error.
                   }
               });

           peticion.setTag(MY_TAG);
           requestQueue.add(peticion);
      }

      public String incluirParametrosAUrl(String url, HashMap parametrosGET) {

           if (parametrosGET != null && !parametrosGET.isEmpty()) {
               url += "?";

               Iterator<Map.Entry<String, String>> it = parametrosGET.entrySet().iterator();

               while (it.hasNext()) {
                   Map.Entry<String, String> parametro = it.next();
                   url += parametro.getKey() + "=" + parametro.getValue();
                   if (it.hasNext()) {
                      url += "&";
                   }
               }
           }
           return url;
      }

    • Vas a tener que ser más concreto. El ejemplo es muy básico. Lo único que no se explica es cómo tratar un JSON de respuesta. ¿Puedes indicar qué te falta o dónde te pierdes?

    • Gracias a ti también. Sois la pieza que hace que esto tenga sentido. 😉

    • La respuesta la encuentras aquí: https://androidclarified.com/android-volley-example/.

      Consiste en que utilices una JsonObjectRequest o una JsonArrayObjectRequest, a las cuales, en su constructor, se le indica el método (GET o POST) y se le puede pasar un HasMap con los parámetros que irán en el body:

      JSONObject postparams = new JSONObject();
      postparams.put(«nombre», «Pedro»)
      postparams.put(«sexo», «hombre»)
      […]

      JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
      url, postParams, new Response.Listener() {
      @Override
      public void onResponse(JSONObject response) {
      // Success Callback
      }
      },
      new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {
      // Failure Callback
      }
      });

      Si quieres enviar cabeceras, sobrescribes el método getHeaders() de la petición para que devuelva un HashMap con las cabeceras que quieres enviar.

  • Angel O'Brien ahora es un usuario registrado hace 11 años

  • Al programador front-end (encargado de la interfaz) de una página web profesional desde el momento que carga archivos css, javascript o hasta imágenes, suele preocuparse por el tiempo de carga de la página we

    • Hola Miguel, donde dice Código Base está el código para implementarlo, algunas partes están en comentarios porque se usan dependiendo de las necesidades.

      loadJS.js (el primer cuadrante) y funciones.js (el tercer cuadrante) son los archivos que debes agregar al head como comúnmente se cargan .js a una página. El ejemplo es Página.html (segundo cuadrante) donde dice:

      Cargado de Javascript
      script src=’url…loadJS.js’ type=’text/javascript’>

      Aquí cargo el loadJS pero dependerá del url que vayas a usar. Además en las imágenes uso como ejemplo una página creada por mí, puedes guiarte de ahí.

      Espero haber resuelto tu duda, cualquier otra duda nos comentas.

  • Cuando se instala una aplicación en un dispositivo, esta instala consigo una serie de directorios en la carpeta “data/data”, situada en el directorio raíz del dispositivo. Esto podemos verlo utilizando el Android

  • German Peña ha cambiado su imagen de perfil. hace 11 años, 1 mes

  • El perfil de German Peña fue actualizado hace 11 años, 1 mes

  • Ger del Cap ahora es un usuario registrado hace 11 años, 1 mes

  • Un mundo lleno de eventos
    El trabajo en una empresa requiere la movilización de gran cantidad de personal para el desarrollo de una sola aplicación: el briefing con el cliente, el análisis de requisitos, la el

  • Pablo ha cambiado su imagen de perfil. hace 11 años, 1 mes

  • ¿Puedo cambiar la fuente desde el xml? Sí, pero…
    Una forma alternativa y muy recomendable para hacer más fácil el uso de fuentes es crear un TextView personalizado al que podamos agregarle la fuente que

  • Pablo ahora es un usuario registrado hace 11 años, 1 mes

  • Cómo usar una tipografía personalizada en Android
    Muchas veces queremos utilizar en nuestras aplicaciones una fuente distinta de la predeterminada. ¿Cómo logramos esto? A continuación explicaremos cómo y utili

  • El secreto de los SparseBooleanArray
    Cuando desarrollamos una aplicación Android que utiliza listas de elementos (y ¿qué aplicación que se precie no lo hace?), una de las funciones más recurrentes de las que quer

    • Perdón por no haber visto el comentario antes. Lo has resuelto ya o aún quieres que te mande código de ejemplo?

    • Esta tarde buscaré dónde tengo los proyectos y restauraré los enlaces para que los veas. Gracias por avisar, Jesús.

    • En el caso de que tu activity no sea destruida (es decir, que puedas volver a ella pulsando «Atrás»), no hay que hacer nada, porque el contenido de esta no es destruido. Pero si es destruida (porque cierras la activity), según tu propósito, tienes que guardar los elementos seleccionados en memoria (una clase singleton) o en el dispositivo (una base de datos, o un fichero de texto) y luego recuperarlos. Tienes que guardar algo que te permita identificar los elementos que estaban marcados para, en el momento de cargar los elementos, consultar cuáles estaban marcados y volver a ponerlos marcados en el onBindView().

  • Juan José Melero ha cambiado su imagen de perfil. hace 11 años, 2 meses

  • Cargar más