|
||
|
![]() |
![]() |
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 |
![]() |
|
Herramientas |
#1
|
||||
|
||||
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); } 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"))); ¿Que hago mal? Última edición por Merche300 Día 01/01/17 a las 13:21:34. |
|
#2
|
||||
|
||||
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)
__________________
|
Gracias de parte de: | ||
#3
|
||||
|
||||
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) ![]() 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); } } } }); } |
#4
|
||||
|
||||
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í. |
Gracias de parte de: | ||
#5
|
||||
|
||||
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í. ![]() |
#6
|
||||
|
||||
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); 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 } }
__________________
|
Gracias de parte de: | ||
#7
|
||||
|
||||
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); 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 } } ![]() No conozco otra manera de que muestre las casillas |
#8
|
||||
|
||||
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. |
Gracias de parte de: | ||
#9
|
||||
|
||||
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. ![]() |
![]() |
![]() |
||||||
|