Foros del Web » Programando para Internet » Android »

Problema con ProgressDialog

Estas en el tema de Problema con ProgressDialog en el foro de Android en Foros del Web. Hola qué tal, hace poco que me aventuré en el mundo de desarrollo de aplicaciones y android y me he topado con un problema. La ...
  #1 (permalink)  
Antiguo 31/08/2014, 07:10
 
Fecha de Ingreso: agosto-2014
Mensajes: 1
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta Problema con ProgressDialog

Hola qué tal, hace poco que me aventuré en el mundo de desarrollo de aplicaciones y android y me he topado con un problema. La aplicación es muy básica. Rellenas unos datos, pulsas un botón y te sale una frase automáticamente. Ahora bien, para complicarla un poco más decidí retrasar la salida de la frase un tiempo, pero claro, queda feo la pantalla sin hacer nada unos segundos. Hasta ahí todo bien. El problema surge cuando intenté añadirle un progressDialog circular que se ejecutara a la vez que se detenía por unos segundos la salida del texto. Por ahora se ejecuta el progress dialog pero luego a la hora de mostrar el texto se detiene la aplicación

Dejo el código por si alguien puede ayudarme:

Código:
public class MyActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        Button button = (Button) findViewById(R.id.searchBtn);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
final ProgressDialog progress = ProgressDialog.show(MyActivity.this, "Buscando...",
                        "Espere mientras se busca la información...", true);

                new Thread(new Runnable() {
                    @Override
                    public void run()
                    {
                        // Código principal de la aplicación

                        EditText text = (EditText) findViewById(R.id.nameTxt);
                        //comprobar si existe nombre
                        if ("".equals(text.getText().toString().trim())) {
                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.noNameMsg), Toast.LENGTH_SHORT).show();
                            return;
                        }
                        String enteredName = text.getText().toString();
                        String finalName = enteredName.toLowerCase();
                        //String salutation = getResources().getString(R.string.hello)
                        // + " " + enteredName;
                        int codeASCII = 0;
                        for (int x = 0; x < finalName.length(); x++) {
                            codeASCII += (int) finalName.charAt(x);
                        }


                        EditText day = (EditText) findViewById(R.id.day);
                        //comprobar si se ha introducido día
                        if ("".equals(day.getText().toString().trim())) {
                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.noDayMsg), Toast.LENGTH_SHORT).show();
                            return;
                        }
                        EditText month = (EditText) findViewById(R.id.month);
                        //comprobar si se ha introducido mes
                        if ("".equals(month.getText().toString().trim())) {
                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.noMonthMsg), Toast.LENGTH_SHORT).show();
                            return;
                        }
                        EditText year = (EditText) findViewById(R.id.year);
                        //comprobar si se ha introducido año
                        if ("".equals(year.getText().toString().trim())) {
                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.noYearMsg), Toast.LENGTH_SHORT).show();
                            return;
                        }

                        int dia = Integer.valueOf(day.getText().toString());
                        int año = Integer.valueOf(year.getText().toString());
                        int mes = Integer.valueOf(month.getText().toString());
                        int nacimiento = dia + mes + año;
                        int nTotal = 17;
                        int x = (codeASCII + nacimiento) % nTotal;

                        String[] insultos = new String[nTotal];

                        insultos[0] = "No te preocupes, hay más virtudes que la inteligencia";
                        insultos[1] = "Tienes futuro como plantador de nabos";
                        insultos[2] = "Ha llegado la hora de pensar en ir saliendo del armario";
                        insultos[3] = "Se puede vivir con dignidad a pesar de tan elevado grado de alopecia";
                        insultos[4] = "Tú tambien podrás triunfar, recuerda a Forrest Gump";
                        insultos[5] = "Ni Newton ni Einsten, sabemos que lo tuyo es Bob Esponja";
                        insultos[6] = "A no todo el mundo le sale bien una O cuando usa un canuto. No te preocupes, ya aprenderás";
                        insultos[7] = "Tu atractivo será evidente para muchos, puede incluso que para alguna persona";
                        insultos[8] = "No es un error que te creas tan atractivo, tu error es que no estás bien informado";
                        insultos[9] = "Te espera un brillante fututro en el mundo del porno, siempre hace falta gente que lleve las toallas";
                        insultos[10] = "Tu cociente intelectual es, bueno, el suficiente para que te hayas descargado esta aplicación absolutamente inútil";
                        insultos[11] = "Muéstrate siempre tal y como eres, salvo cuando intentes gustar a alguien";
                        insultos[12] = "Si le caes bien a mucha gente deberías recordar que el perro es el mejor amigo del hombre ";
                        insultos[13] = "Tienes una mente de altos vuelos, o lo que es lo mismo, un cerebro de pájaro";
                        insultos[14] = "La mediocridad es lo que más abunda, puede que eso te dé consuelo";
                        insultos[15] = "Totorota es una palabra canaria. Aún así, cualquier peninsular que te vea sabrá lo que significa";
                        insultos[16] = "Por fin podrás vivir como siempre habías soñado... en casa de tu madre";

                        TextView out = (TextView) findViewById(R.id.out);
                        out.setText(insultos[x]);


                        runOnUiThread(new Runnable() {
                            @Override
                            public void run()
                            {
                                progress.dismiss();
                            }
                        });
                    }
                }).start();
            }

        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
Agradecería mucho una respuesta

Gracias de antemano!!
  #2 (permalink)  
Antiguo 01/09/2014, 03:04
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 12
Respuesta: Problema con ProgressDialog

Hola

Cita:
Iniciado por NicoGBoissier Ver Mensaje
Por ahora se ejecuta el progress dialog pero luego a la hora de mostrar el texto se detiene la aplicación
Cuando se detiene la aplicación es por que ha ocurrido un error, lo primero que tienes que hacer es averiguar cual fue el error.

Si programas para android es muy importante que aprendas a mirar el LogCat, para saber qué está ocurriendo en tu aplicación y saber cual fue exactamente el error. Y ese error que te aparece en el LogCat, si no sabes como solucionarlo, es el que debes poner aquí para que puedan ayudarte.

Saludos
  #3 (permalink)  
Antiguo 01/09/2014, 18:04
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema con ProgressDialog

Si, este el problema:

1. Android no te deja hacer operaciones pesadas en el main thread porque bloqueas la aplicación. La solución es correr los procesos pesados en un thread diferente.
2. Incluso si corres tu proceso pesado en otro thread hay ciertas consideraciones que tienes que hacer. Una de ellas es que si haces cambio en el UI tienes que hacerlo en el main thread. Para eso, puedes usar un handler http://developer.android.com/guide/f...html#threading

Incluso puedes usar un AsyncTask

Etiquetas: app, dialog, problem, progress
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 11:07.