Hack x Crack - Comunidad de Seguridad informática

Programación => Java y Android => Mensaje iniciado por: Jonytexas en Noviembre 01, 2016, 01:00:05 pm

Título: Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 01, 2016, 01:00:05 pm
Tengo una funcion que abre la camara de fotos y guarda la imagen recibida al telefono y funciona de maravilla. Pero esa funcion en mi app va a ser llamada varias veces, para evitar rellenar mucho codigo y repetido he pensado hacer como una clase con esas funciones que necesito para evitar duplicar codigo y para que me sea mas comodo.

Cuando la funcion/metodo esta en la misma clase funciona de maravilla(abre la camara y hace y guarda la fotografia tomada) pero al poner en la otra clase la funcion/metodo abrirCamara nose abre y se cierra la app.

He probado con otra funcion/metodo de ejemplo sumar pasandole dos valores y me funciona bien, pero el abrir la camara no me funciona. Y la funcion/metodo esta bien porque esta probado que funciona.

Alguna ayuda?? Consejo??

LLAMANDO A LA FUNCION DE LA OTRA CLASE
CLASE main

Código: Java(TM) 2 Platform Standard Edition 5.0
  1. //Cuando hacemos click en boton hacer foto
  2.         btnHacerFoto.setOnClickListener(new View.OnClickListener() {
  3.             @Override
  4.             public void onClick(View v) {
  5.  
  6.                 funcionesJony funciones = new funcionesJony();
  7.                 funciones.abrirCamara();
  8.             }
  9.         });


CLASE funcionesJony
Código: Java(TM) 2 Platform Standard Edition 5.0
  1.     public void abrirCamara(){
  2.         //Abrirmos la camara
  3.         Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  4.         int code = TAKE_PICTURE;
  5.         Uri output = Uri.fromFile(new File(name));
  6.         intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
  7.         startActivityForResult(intent, code);
  8.     }
  9.  


Un saludo!!!
Título: Re:Reutilizar una funcion.
Publicado por: mrobles en Noviembre 01, 2016, 01:43:25 pm
Lo primero, crea clases y metodos estatico para hacer esto, normalmente la gente se crea un "Utils.class"
Código: Java
  1. funcionesJony funciones = new funcionesJony();
  2.                 funciones.abrirCamara();
  3.  

El codigo esta bien, pero donde esta el onActivityResult?
Título: Re:Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 01, 2016, 06:11:36 pm
Todavia no lo he creado. Pensaba crearlo luego una vez me abriera la camara. ::) ::)

Gracias por la respueta investigare como hacer eso de Utils.Class

Sabes de algun sitio donde pueda informarme como hacerla?

Un saludo

P.D: Se nota que soy principante, jejeje   :-[ :-[ :-[ :P :P :P
Título: Re:Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 01, 2016, 06:37:00 pm
Lo primero, crea clases y metodos estatico para hacer esto, normalmente la gente se crea un "Utils.class"
Código: Java
  1. funcionesJony funciones = new funcionesJony();
  2.                 funciones.abrirCamara();
  3.  

El codigo esta bien, pero donde esta el onActivityResult?


El onActivityResult lo tengo a continuacion del metodo abrirCamara.
Hago el metodo abrirCamara static pero cuando llamamos al onActivityResult me da error.
Intento solucionarlo creando el onActivityResult a static pero no hay maner que puede ser...

-Pongo el codigo del metodo abrirCamara
Código: Java
  1. public static void abrirCamara(){
  2.         //Abrirmos la camara
  3.         Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  4.         int code = TAKE_PICTURE;
  5.         Uri output = Uri.fromFile(new File(name));
  6.         intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
  7.         funcionesJony.startActivityForResult(intent, code);<----  AQUI ME DA EL ERROR[/i]
  8.     }


--Codigo del onActivityResult
Código: Java
  1. @Override
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3.         super.onActivityResult(requestCode, resultCode, data);
  4.  
  5.         if (resultCode == RESULT_OK) {
  6.             if(requestCode == TAKE_PICTURE) {
  7.              
  8.                 } else {            
  9.  
  10.                 }
  11.             }
  12.         }
  13.     }

Un saludo

Estoy creando los metodos estaticos
Título: Re:Reutilizar una funcion.
Publicado por: mrobles en Noviembre 01, 2016, 06:58:22 pm
Si la clase principal no se inicializa (static) no podrá recoger los valores, por lo que deberías tener algún acceso a ella.
Pon el error aquí y sera mas fácil.
Título: Re:Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 01, 2016, 07:58:46 pm
Es que en el codigo no me da ningun error...  :-X :-X  Y cuando desde la app doy al boton que llama al metodo abrirCamara hace la intencion de abrir la camara pero se reinicia la app.

Quitando la linea de codigo que llama a onActivityResult al darle al boton no se me cierra la app, pero tampoco abre la camara.


Te paso el codigo de funcionesJony (Que renombrare a Utils)

Código: Java
  1. package com.choiboi.imagecroppingexample;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.net.Uri;
  7. import android.provider.MediaStore;
  8. import android.widget.ImageView;
  9.  
  10. import java.io.File;
  11.  
  12. /**
  13.  * Created by Jonathan on 31/10/2016.
  14.  */
  15.  
  16. public class funcionesJony extends Activity{
  17.  
  18.     private static int TAKE_PICTURE = 1;
  19.     private static String name = "";
  20.  
  21.  
  22.     public static void abrirCamara(){
  23.         //Abrirmos la camara
  24.         Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  25.         int code = TAKE_PICTURE;
  26.         Uri output = Uri.fromFile(new File(name));
  27.         intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
  28.         startActivityForResult(intent, code);
  29.     }
  30.  
  31.  
  32.     @Override
  33.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  34.         super.onActivityResult(requestCode, resultCode, data);
  35.  
  36.         if (resultCode == RESULT_OK) {
  37.             if(requestCode == TAKE_PICTURE) {
  38.                
  39.                 } else {
  40.                    
  41.  
  42.                 }
  43.             }
  44.         }
  45.     }
  46. }
  47.  


Un saludo y gracias por tu ayuda...
Título: Re:Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 01, 2016, 08:21:10 pm
Vale acabo de ver que cuando la hago static me pone en la linea que llamo a onActivityResult lo siguiente:

Non-static method StartActivityForResult(android.content.Intent, int) cannot be referenced from a static context.

Un saludo
Título: Re:Reutilizar una funcion.
Publicado por: Jonytexas en Noviembre 02, 2016, 12:19:21 am
He estado informandome y me decia algo que faltaba un Context. He creado un context de la View (Vista) que le pasado por parametro al llamar al metodo abrirCamara.

Luego he llamado el ActivitResult con el context: context.startActivity();

Y por fin me ha abierto la camara.

Gracias por tu ayuda.

P.D---> Haber si puedo ahora trabajr con la imagen


Un saludo  ;D ;D
Título: Re:Reutilizar una funcion.
Publicado por: mrobles en Noviembre 05, 2016, 10:29:55 am
Perdona la tardanza pero es eso, si la clase es estática no se carga por lo que no la puedes usar dentro de un método
Lo resolviste bien