
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
Este es el activityforresult que recibe la foto
Este es un metodo que pone la foto en el imageview
Y este es el error que aparece
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


0