Android - Tomar una foto y añadirla a imageView dinamico

 
Vista:
sin imagen de perfil

Tomar una foto y añadirla a imageView dinamico

Publicado por Diego (3 intervenciones) el 25/11/2016 08:07:16
Buenas,
Escribo por que estoy desarrollando una aplicacion en android en el cual añado un imageview dinamicamente al que unha vez capturada la foto deberia pasarse ahi.

Este m,etodo es donde se crea los imageviews
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
private void añadirAveria() {
 refer=edtRefer.getText().toString();
 descrip=edtDescrip.getText().toString();
 LinearLayout.LayoutParams lip= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
 lip.setMargins(0,50,0,0);
 
 LinearLayout.LayoutParams lap= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
 lap.setMargins(25,0,25,0);
 
 layoutPhoto[contadorAverias]=new LinearLayout(this);
 layoutPhoto[contadorAverias].setOrientation(LinearLayout.HORIZONTAL);
 camara[contadorAverias]=new ImageView(this);
 camara[contadorAverias].setLayoutParams(lap);
 camara[contadorAverias].setImageResource(R.drawable.photocamara64);
 camara[contadorAverias].setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
         uriFoto = Uri.fromFile(
                 new File(Environment.getExternalStorageDirectory() + File.separator
                         +"Inadeso_" + (System.currentTimeMillis() / 1000) + ".jpg"));
         Log.d("uriFoto: ", uriFoto.toString() );
         intent.putExtra(MediaStore.EXTRA_OUTPUT, uriFoto);
         startActivityForResult(intent, 1);
     }
 });
 
 galeria[contadorAverias]=new ImageView(this);
 galeria[contadorAverias].setLayoutParams(lap);
 galeria[contadorAverias].setImageResource(R.drawable.picturegallery);
 eliminarFoto[contadorAverias]=new ImageView(this);
 eliminarFoto[contadorAverias].setLayoutParams(lap);
 eliminarFoto[contadorAverias].setImageResource(R.drawable.deletepicture);
 fotografia[contadorAverias]=new ImageView(this);
 fotografia[contadorAverias].setScaleType(ImageView.ScaleType.CENTER_CROP);
 fotografia[contadorAverias].setId(contadorAverias);
 
 btnEliminarAve[contadorAverias]=new ImageButton(this);
 btnEliminarAve[contadorAverias].setImageResource(R.drawable.eliminar);
 btnEliminarAve[contadorAverias].setBackgroundColor(Color.TRANSPARENT);
 final Spinner spinnerTrabajos=new Spinner(this);
 ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, ArrayTiposTrabajos);
 spinnerTrabajos.setAdapter(spinnerArrayAdapter);
 refi[contadorAverias]=new TextView(this);
 refi[contadorAverias].setText("Referencia");
 desc[contadorAverias]=new TextView(this);
 desc[contadorAverias].setText("Descripcion");
 textHor[contadorAverias]=new TextView(this);
 textHor[contadorAverias].setText("Horas Trabajadas:");
 texTip[contadorAverias]=new TextView(this);
 texTip[contadorAverias].setText("Tipo de trabajo: ");
 ref[contadorAverias]=new EditText(this);
 incis2[contadorAverias] = new EditText(this);
 incis2[contadorAverias].setText (descrip);
 ref[contadorAverias].setText(refer);
 ref[contadorAverias].setEnabled(false);
 tipoTrab2[contadorAverias]=new Spinner(this);
 tipoTrab2[contadorAverias].setAdapter(spinnerArrayAdapter);
 horasTrabAve[contadorAverias] = new EditText(this);
 horasTrabAve[contadorAverias].setInputType(InputType.TYPE_CLASS_NUMBER);
 btnEliminarAve[contadorAverias].setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         new AlertDialog.Builder(NuevoParte_1.this)
                 .setTitle( "Borrar" )
                 .setMessage( "Desea borrar este registro?" )
                 .setPositiveButton( "Si", new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int which) {
                         layoutAverias.removeView(refi[contadorAverias-1]);
                         layoutAverias.removeView(ref[contadorAverias-1]);
                         layoutAverias.removeView(desc[contadorAverias-1]);
                         layoutAverias.removeView(incis2[contadorAverias-1]);
                         layoutAverias.removeView(textHor[contadorAverias-1]);
                         layoutAverias.removeView(horasTrabAve[contadorAverias-1]);
                         layoutAverias.removeView(texTip[contadorAverias-1]);
                         layoutAverias.removeView(tipoTrab2[contadorAverias-1]);
                         layoutAverias.removeView(btnEliminarAve[contadorAverias-1]);
                         layoutAverias.removeView(layoutPhoto[contadorAverias-1]);
                         contadorAverias=contadorAverias-1;
                     }
                 })
                 .setNegativeButton( "No", new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int which) {
                         Log.d( "AlertDialog", "Negative" );
                     }
                 } )
                 .show();
     }
 });
 refi[contadorAverias].setLayoutParams(lip);
 layoutAverias.addView(refi[contadorAverias]);
 layoutAverias.addView(ref[contadorAverias]);
 layoutAverias.addView(desc[contadorAverias]);
 layoutAverias.addView(incis2[contadorAverias]);
 layoutAverias.addView(textHor[contadorAverias]);
 layoutAverias.addView(horasTrabAve[contadorAverias]);
 layoutAverias.addView(texTip[contadorAverias]);
 layoutAverias.addView(tipoTrab2[contadorAverias]);
 layoutAverias.addView(btnEliminarAve[contadorAverias]);
 layoutAverias.addView(layoutPhoto[contadorAverias]);
 layoutAverias.addView(fotografia[contadorAverias]);
 //Layout de Foto por averia
 
 layoutPhoto[contadorAverias].addView(camara[contadorAverias]);
 layoutPhoto[contadorAverias].addView(galeria[contadorAverias]);
 layoutPhoto[contadorAverias].addView(eliminarFoto[contadorAverias]);
// layoutPhoto[contadorAverias].addView(fotografia[contadorAverias]);
 
 edtRefer.setText("");
 edtDescrip.setText("");
 contadorAverias=contadorAverias+1;

Este es el activityforresult que recibe la foto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
@Override
protected void onActivityResult(int requestcode,int  resultCode,Intent mat){
    super.onActivityResult(requestcode, resultCode, mat);
    switch (requestcode){
        case 0:
            if (RESULT_OK==resultCode){
 
                String materialCreado=mat.getStringExtra("material");
                String canti=mat.getStringExtra("cantidad");
 
                btnEliminarMat[contadorMaterial]=new ImageButton(this);
                btnEliminarMat[contadorMaterial].setImageResource(R.drawable.eliminar2);
                btnEliminarMat[contadorMaterial].setBackgroundColor(Color.TRANSPARENT);
                mater[contadorMaterial]=new TextView(this);
                mater[contadorMaterial].setText(materialCreado);
                final TextView cant=new TextView(this);
                cant.setText("Cantidad:");
                cantidad[contadorMaterial]=new EditText(this);
                cantidad[contadorMaterial].setInputType(InputType.TYPE_CLASS_NUMBER);
                btnEliminarMat[contadorMaterial].setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        new AlertDialog.Builder(NuevoParte_1.this)
                                .setTitle( "Borrar" )
                                .setMessage( "Desea borrar este registro?" )
                                .setPositiveButton( "Si", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        layoutMateriales.removeView(mater[contadorMaterial-1]);
                                        layoutMateriales.removeView(cantidad[contadorMaterial-1]);
                                        layoutMateriales.removeView(btnEliminarMat[contadorMaterial-1]);
                                        layoutMateriales.removeView(cant);
                                        contadorMaterial=contadorMaterial-1;
                                    }
                                })
                                .setNegativeButton( "No", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        Log.d( "AlertDialog", "Negative" );
                                    }
                                } )
                                .show();
                    }
                });
                cantidad[contadorMaterial].setText(canti);
                datocant= cantidad[contadorMaterial].getText().toString();
                dato2cant=datocant;
                cantidadString.add(dato2cant);
                layoutMateriales.addView(mater[contadorMaterial]);
                layoutMateriales.addView(cant);
                layoutMateriales.addView(cantidad[contadorMaterial]);
                layoutMateriales.addView(btnEliminarMat[contadorMaterial]);
                contadorMaterial=contadorMaterial+1;
 
            }
            break;
        case 1:
            if(RESULT_OK==resultCode && uriFoto!=null){
                textFoto = uriFoto.toString();
                Log.d(TAG, "De camara: " + textoFoto);
 
                //Lugares.actualizaLugar((int) id, lugar);
                fotografia[contadorAverias]=(ImageView) findViewById(contadorAverias);
                ponerFoto(fotografia[contadorAverias], textFoto);
 
    }
 
            break;
        case 2:
            break;
    }
 
 
 
}

Este es un metodo que pone la foto en el imageview
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected void ponerFoto(ImageView imageView, String uri) {
    if ((uri == null) || (uri.equals(""))) {
        imageView.setImageBitmap(null);
    } else {
        //imageView.setImageURI(Uri.parse(uri));
        // El codigo a continuacion escala la imagen para evitar fallo de memoria al guardarla
        Bitmap d = null;
        try{
            d= MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(uri));
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        int nh = (int) (d.getHeight() * (254.0 / d.getWidth()));
 
        Bitmap scaled = Bitmap.createScaledBitmap(d, 254, nh, true);
        //imageView.setImageURI(Uri.parse(uri));
        imageView.setImageBitmap(scaled);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        Toast.makeText(NuevoParte_1.this,"llego aki",Toast.LENGTH_LONG).show();
    }
}

Y este es el error que aparece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.pronegotec.inadeso, PID: 4236
              java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.pronegotec.inadeso/com.pronegotec.inadeso.NuevoParte_1}: java.lang.NullPointerException
                  at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)
                  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
                  at android.app.ActivityThread.access$1300(ActivityThread.java:135)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:136)
                  at android.app.ActivityThread.main(ActivityThread.java:5017)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:515)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                  at dalvik.system.NativeStart.main(Native Method)
               Caused by: java.lang.NullPointerException
                  at com.pronegotec.inadeso.NuevoParte_1.ponerFoto(NuevoParte_1.java:513)
                  at com.pronegotec.inadeso.NuevoParte_1.onActivityResult(NuevoParte_1.java:482)
                  at android.app.Activity.dispatchActivityResult(Activity.java:5423)
                  at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
                  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
                  at android.app.ActivityThread.access$1300(ActivityThread.java:135)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:136)
                  at android.app.ActivityThread.main(ActivityThread.java:5017)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:515)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                  at dalvik.system.NativeStart.main(Native Method)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder