Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 01/01/17, 12:35:36
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
Itext put extra

Buenos dias, veran tengo un problema con putExtra, el caso es que quiero pasar una imagen de in activiy a otra y no hay manera:

1ª activity,

Código:
        Bitmap bitmap = BitmapFactory.decodeResource
                (getResources(), R.drawable.trinity); // your bitmap
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bs);
        pdf.putExtra("check", bs.toByteArray());

        startActivity(pdf);
    }
y en la segunda, la que quero recoger los datos que es itext, para crear un .pdf

Código:
 if(getIntent().hasExtra("byteArray")) {
                ImageView imv= new ImageView(this);
                Bitmap bitmap = BitmapFactory.decodeByteArray(
                        getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("check").length);
                imv.setImageBitmap(bitmap);
            }

            cabecera.add(String.valueOf(getIntent().getByteArrayExtra("byteArray")));
El caso es que el resultado es un texto como ese, [B@eacc9c1

¿Que hago mal?

Última edición por Merche300 Día 01/01/17 a las 13:21:34.
Responder Con Cita


  #2  
Viejo 01/01/17, 20:21:14
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
Si no vas a hacer uso del Bitmap en la Activity origen, no te sale para nada a cuenta convertirlo a Bitmap (proceso muy costoso) y pasarlo a la segunda.

En su lugar, puedes:

1. Pasar únicamente la id (en tu caso, R.drawable.trinity), que es un int
2. Hacerlo todo directamente desde la segunda, pasando un extra booleano que sea "showImage", por ejemplo (si la imagen es constante)
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 01/01/17, 21:24:01
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Si no vas a hacer uso del Bitmap en la Activity origen, no te sale para nada a cuenta convertirlo a Bitmap (proceso muy costoso) y pasarlo a la segunda.

En su lugar, puedes:

1. Pasar únicamente la id (en tu caso, R.drawable.trinity), que es un int
2. Hacerlo todo directamente desde la segunda, pasando un extra booleano que sea "showImage", por ejemplo (si la imagen es constante)
Si Dexafree, si he de hacer, mi intencion seria cojer la imagen, que seria una imagen digamos un icono "checkbox" marcado y otra imagen checkbox sin marcar, para al seleccionar el checkbox una casilla me envie al itext los datos para imprimir digamos un formulario.

Código:
final RadioGroup grupo1 = (RadioGroup) findViewById(R.id.radioGroup_gasoil);

        grupo1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    @override
                    public void onCheckedChanged(RadioGroup grupo, int checkedId) {
                        // Código que se va a ejecutar cuando se cambie de radiobutton

                        if (checkedId == R.id.gasoleo_a) {
                            Bitmap bitmap = BitmapFactory.decodeResource
                (getResources(), R.drawable.check_on); // your bitmap
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bs);
        pdf.putExtra("check", bs.toByteArray());

        startActivity(pdf);
    }
                        } else if (checkedId == R.id.gasoleo_b) {
                            Bitmap bitmap = BitmapFactory.decodeResource
                (getResources(), R.drawable.check_of); // your bitmap
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bs);
        pdf.putExtra("check", bs.toByteArray());

        startActivity(pdf);
    }
                        }
                    }
        });
    }
Responder Con Cita
  #4  
Viejo 02/01/17, 12:24:23
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Sinceramente, no entiendo el código, no se de donde sale "byteArray" en la segunda Activity.

Después, no entiendo porque necesitas enviar una imagen que sacas de los recursos, y que no es generada propiamente en esa Activity, cuando tal y como dice @Dexafree con pasar el ID te sobra, ya que R.drawable.check_on va a ser el mismo en una Activity que en la otra, ya que pertenecen ambas a la misma aplicación (cosa distinta sería si fuesen aplicaciones distintas).

Y por último, los Extra que puedes pasar a otra Activity están limitados, tanto en espacio como en tiempo. Es decir, no puedes enviar más de 500kb, y en algunos móviles es incluso menos, y tampoco puedes enviar algo que tarde en "desempaquetarse" más de 0,5 segundos (aprox).

Todo lo anterior lo se porque estuve durante 2 años trabajando en una aplicación de tratamiento fotográfico.

La solución pasa por 2 cosas:

1) Si es la misma aplicación la que contiene a las 2 Activity puedes almacenar la imagen en una variable static (de los pocos casos en los que hay que tirar de variables static).

2) Si es una aplicación distinta, tendrás que hacer como hace la cámara de Google, que almacena la imagen en la ruta que tú le indicas para luego leerla de ahí.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 05/01/17, 17:51:20
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Sinceramente, no entiendo el código, no se de donde sale "byteArray" en la segunda Activity.

Después, no entiendo porque necesitas enviar una imagen que sacas de los recursos, y que no es generada propiamente en esa Activity, cuando tal y como dice @Dexafree con pasar el ID te sobra, ya que R.drawable.check_on va a ser el mismo en una Activity que en la otra, ya que pertenecen ambas a la misma aplicación (cosa distinta sería si fuesen aplicaciones distintas).

Y por último, los Extra que puedes pasar a otra Activity están limitados, tanto en espacio como en tiempo. Es decir, no puedes enviar más de 500kb, y en algunos móviles es incluso menos, y tampoco puedes enviar algo que tarde en "desempaquetarse" más de 0,5 segundos (aprox).

Todo lo anterior lo se porque estuve durante 2 años trabajando en una aplicación de tratamiento fotográfico.

La solución pasa por 2 cosas:

1) Si es la misma aplicación la que contiene a las 2 Activity puedes almacenar la imagen en una variable static (de los pocos casos en los que hay que tirar de variables static).

2) Si es una aplicación distinta, tendrás que hacer como hace la cámara de Google, que almacena la imagen en la ruta que tú le indicas para luego leerla de ahí.
Veras kriogeN, Lo que me gustaria es desde el MainActivity, pasar los checkbox al Pdf.java con casillas de verificacion, las marcadas que me pasen con el R.drawable.check_on y las no marcadas con el R.drawable.check_of a no ser que haya otra manera distinta. Espero que asi lo entiendas mejor y gracias por tu respuesta.
Responder Con Cita
  #6  
Viejo 06/01/17, 12:00:05
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
 Cita: Originalmente Escrito por Merche300 Ver Mensaje
Veras kriogeN, Lo que me gustaria es desde el MainActivity, pasar los checkbox al Pdf.java con casillas de verificacion, las marcadas que me pasen con el R.drawable.check_on y las no marcadas con el R.drawable.check_of a no ser que haya otra manera distinta
Creo que es más facil pasar un array de booleanos (o de enteros/shorts, ya que Bundle no tiene métodos para Boolean, creo recordar).

Código:
ArrayList<Integer> listaEnteros = new ArrayList<>();
// La rellenas con unos o ceros, en función de si es true o false.
// Con un for estándar podrías hacerlo si los booleanos los tienes en lista, y si no, a mano


Bundle bundle = new Bundle();
bundle.putIntegerArrayList("mi_lista", listaEnteros);

Intent intent = new Intent(this, Pdf.class);
intent.putExtras(bundle);
startActivity(intent);
Y luego en la Activity destino, tendrás que hacer

Código:
 @override
public void onCreate(Bundle savedState){
  // Tus cosas
  Bundle extras = getIntent().getExtras();
  if(extras != null){
    ArrayList<Integer> miLista = extras.getIntegerArrayList("mi_lista");
    // Conviertela a booleanos y haz con ella lo que quieras
  }
}
En mi opinión, pasar el drawable no te aporta nada si lo unico que quieres es saber si están marcadas o no.
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 06/01/17, 13:48:42
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Creo que es más facil pasar un array de booleanos (o de enteros/shorts, ya que Bundle no tiene métodos para Boolean, creo recordar).

Código:
ArrayList<Integer> listaEnteros = new ArrayList<>();
// La rellenas con unos o ceros, en función de si es true o false.
// Con un for estándar podrías hacerlo si los booleanos los tienes en lista, y si no, a mano


Bundle bundle = new Bundle();
bundle.putIntegerArrayList("mi_lista", listaEnteros);

Intent intent = new Intent(this, Pdf.class);
intent.putExtras(bundle);
startActivity(intent);
Y luego en la Activity destino, tendrás que hacer

Código:
 @override
public void onCreate(Bundle savedState){
  // Tus cosas
  Bundle extras = getIntent().getExtras();
  if(extras != null){
    ArrayList<Integer> miLista = extras.getIntegerArrayList("mi_lista");
    // Conviertela a booleanos y haz con ella lo que quieras
  }
}
En mi opinión, pasar el drawable no te aporta nada si lo unico que quieres es saber si están marcadas o no.

No conozco otra manera de que muestre las casillas
Responder Con Cita
  #8  
Viejo 06/01/17, 15:40:55
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por Merche300 Ver Mensaje
No conozco otra manera de que muestre las casillas
Como ya te hemos dicho tanto @Dexafree como yo, ¿qué más te da leer los archivos de imagen en la MainActivity que en la Activity PDF?

En ambas tendrás disponibles los mismos recursos, es decir, R.drawable.check_on lo podrás leer tanto en una como en otra, pasas en el Intent un valor ("check", 1) y en ese caso en la Activity PDF abres el R.drawable.check_on. O pasas ("check", 0) y lees el R.drawable.check_off.

Como te he dicho en el anterior post el único caso donde no te funcionaría esto es si MainActivity y PDF están en aplicaciones distintas, pero no creo que ese sea el caso. Incluso en paquetes distintos dentro de la misma aplicación te seguiría funcionando.
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 06/01/17, 16:37:20
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Como ya te hemos dicho tanto @Dexafree como yo, ¿qué más te da leer los archivos de imagen en la MainActivity que en la Activity PDF?

En ambas tendrás disponibles los mismos recursos, es decir, R.drawable.check_on lo podrás leer tanto en una como en otra, pasas en el Intent un valor ("check", 1) y en ese caso en la Activity PDF abres el R.drawable.check_on. O pasas ("check", 0) y lees el R.drawable.check_off.

Como te he dicho en el anterior post el único caso donde no te funcionaría esto es si MainActivity y PDF están en aplicaciones distintas, pero no creo que ese sea el caso. Incluso en paquetes distintos dentro de la misma aplicación te seguiría funcionando.
Aaaa, ok gracias a los dos, no lo entendi.
Responder Con Cita
  #10  
Viejo 07/01/17, 11:40:24
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
 Cita: Originalmente Escrito por Merche300 Ver Mensaje
No conozco otra manera de que muestre las casillas
Checkbox tiene los métodos isChecked() y setChecked(boolean) para cambiarle el estado
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android

Herramientas


Hora actual: 00:19:29 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /