Foros del Web » Programando para Internet » Android »

Problema con AlertDialog

Estas en el tema de Problema con AlertDialog en el foro de Android en Foros del Web. Buenas, estoy un poco iniciado en la programación android y estoy haciendo un proyecto para clase. Mi aplicación entre otras funciones, hace una consulta a ...
  #1 (permalink)  
Antiguo 13/05/2014, 03:43
 
Fecha de Ingreso: marzo-2013
Mensajes: 51
Antigüedad: 11 años, 8 meses
Puntos: 2
Problema con AlertDialog

Buenas, estoy un poco iniciado en la programación android y estoy haciendo un proyecto para clase.

Mi aplicación entre otras funciones, hace una consulta a base de datos a través de php, recojo el resultado en un array en JSON y muestro los resultados en un listview. El problema surge cuando hago clic en un elemento del listview quiero que se muestre un dialogo, cuando le doy clic me sale lo de forzar cierre.

Dejo la parte del código que me está dando problemas.

Código Java:
Ver original
  1. public class SacarLibro extends Activity{
  2. ....
  3.  
  4.  
  5.     static class Tarea2 extends AsyncTask<ListView, Void, ArrayAdapter<Libros>> {
  6.  
  7.         Context contexto;
  8.         Context contexto2;
  9.         ListView list;
  10.         InputStream is;
  11.         ArrayList<Libros> listaLibros = new ArrayList<Libros>();
  12.         AlertDialog.Builder dialogo1;
  13.        
  14.         public void cargarDialogo (Context contexto2){
  15.             this.contexto2 = contexto2;
  16.         }
  17.         public void cargarContenido(Context contexto) {
  18.             this.contexto = contexto;
  19.         }
  20.  
  21.         @Override
  22.         protected void onPreExecute() {
  23.  
  24.         }
  25.  
  26.         @Override
  27.         protected ArrayAdapter<Libros> doInBackground(ListView... params) {
  28.             ....
  29.                 }
  30.         @Override
  31.         protected void onPostExecute(ArrayAdapter<Libros> result) {
  32.             list.setAdapter(result);
  33.             mostrarDialogo();
  34.              //Log.e("Extra", user);
  35.            
  36.         }
  37.  
  38.         protected void mostrarDialogo() {
  39.             // TODO Auto-generated method stub
  40.             list.setOnItemLongClickListener(new OnItemLongClickListener(){
  41.  
  42.                 @Override
  43.                 public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
  44.                         int arg2, long arg3) {
  45.                     // TODO Auto-generated method stub
  46.                     dialogo1 = new AlertDialog.Builder(contexto2);
  47.                     dialogo1.setTitle("Importante");  
  48.                     dialogo1.setMessage("¿ Quieres sacar este libro ?");            
  49.                     dialogo1.setCancelable(false);  
  50.                     dialogo1.setPositiveButton("Confirmar", new DialogInterface.OnClickListener() {  
  51.                         public void onClick(DialogInterface dialogo1, int id) {  
  52.                             aceptar();  
  53.                         }  
  54.                     });  
  55.                     dialogo1.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {  
  56.                         public void onClick(DialogInterface dialogo1, int id) {  
  57.                             cancelar();
  58.                         }  
  59.                     });            
  60.                     dialogo1.show();
  61.                     return false;
  62.                 }
  63.                
  64.             });
  65.  
  66.            
  67.         }
  68.  
  69. }

Según la documentación oficial en "dialogo1 = new AlertDialog.Builder(contexto2);", hay que pasar el contexto de la aplicación mediante getApplicationContext() pero a mi no me deja, eclipse me da error, también he leido en otras páginas pasar el contexto con this, con getActivity(), con NombreDeMiActividad.this, y más maneras, pero en todas eclipse me da error excepto como lo tengo yo.

El error que me da el log es: Unable to add window token null is not for an application

Espero que me puedan ayudar puesto que llevo ya varios días dando vueltas y no consigo nada.

Saludos.

Última edición por jcastro3; 13/05/2014 a las 03:49
  #2 (permalink)  
Antiguo 13/05/2014, 10:35
Avatar de mikolbe  
Fecha de Ingreso: octubre-2010
Mensajes: 104
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Problema con AlertDialog

En algún momento ejecutas cargarDialogo(...)?
Si no lo ejecutás contexto2 queda null.

<<[[Mikol Be]]>>
  #3 (permalink)  
Antiguo 14/05/2014, 00:38
 
Fecha de Ingreso: marzo-2013
Mensajes: 51
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: Problema con AlertDialog

Cita:
Iniciado por mikolbe Ver Mensaje
En algún momento ejecutas cargarDialogo(...)?
Si no lo ejecutás contexto2 queda null.

<<[[Mikol Be]]>>
Claro, en la clase principal SacarLibro instancio la clase Tarea2, y antes de hacer tarea.execute(), hago la llamada a tarea.cargarContenido(getApplicationContext()) y tarea.cargarDialogo(getApplicationContext()) para cargar el contexto y poder acceder a los componentes visuales.

Código Java:
Ver original
  1. public class SacarLibro extends Activity {
  2.  
  3.     static String user;
  4.     ListView listajson;
  5.  
  6.     public void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.sacarlibro);
  9.  
  10.         Bundle extras = getIntent().getExtras();
  11.         if (extras != null) {
  12.             user = extras.getString("user");
  13.         } else {
  14.             user = "error";
  15.         }
  16.  
  17.         listajson = (ListView) findViewById(R.id.listaJson2);
  18.  
  19.         Tarea2 tarea = new Tarea2();
  20.         tarea.cargarContenido(getApplicationContext());
  21.         tarea.cargarDialogo(getApplicationContext());
  22.         tarea.onPreExecute();
  23.         tarea.execute(listajson);
  24.     }
  25.  
  26.     static class Tarea2 extends AsyncTask<ListView, Void, ArrayAdapter<Libros>> {

El caso es que yo creo que cuando creo el dialogo, como tu dices, por alguna razón context2 o context (he probado con los dos) me tiene que estar valiendo null.

En cambio, si el método mostrarDialogo le dejo sin la parte del diálogo, solo con el onItemLongClikc() y la llamada a un método que tengo que se llama aceptar()


El método aceptar muestra un toast, y al crear el toast y pasarle el contexto, si que funciona ese toast, no se si me explico.

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:20.