2014-08-31 69 views
0

我的應用程序出現問題。 progressDialog顯示完美,但在此之後,應用程序不起作用。應用程序必須在progressDialog之後顯示消息並完成一些editText。這裏是MyActivity的代碼:Android應用程序中的ProgressDialog

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); 
} 

}

+0

所以你的應用程序崩潰的ProgressDialog出現後是什麼呢?你的logcat顯示什麼? – shyam 2014-08-31 13:51:03

+0

爲什麼有'Thread'? – 2014-08-31 13:56:06

+0

「但在此之後,應用程序不起作用」 - 這是什麼意思?應用程序崩潰? – eldjon 2014-08-31 14:50:42

回答

0

可以使用的AsyncTask類做這樣的事情:

後onCreate()方法定義內部類像下面的代碼:

private class Async extends AsyncTask<String, Integer, String> { 

    ProgressDialog progressDialog ; 

    protected String doInBackground(String... urls) { 

       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); 
       } 




       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"; 

      return insultos[x]; 


    } 

    @Override 
    protected void onPreExecute() { 

     progressDialog = new ProgressDialog(yourActivity.this); 
     progressDialog.setMessage("yourMessage"); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     progressDialog .dismiss(); 
     outt.setText(result); 
    } 
} 

將此變量定義爲全局變量:

EditText text 
    EditText day; 
    EditText month; 
    EditText year; 
    TextView outt; 

中的onCreate():

text = (EditText) findViewById(R.id.nameTxt); 
day = (EditText) findViewById(R.id.day); 
month = (EditText) findViewById(R.id.month); 
year = (EditText) findViewById(R.id.year); 
outt = (TextView) findViewById(R.id.out); 
if ("".equals(text.getText().toString().trim())) { 
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.noNameMsg), Toast.LENGTH_SHORT).show(); 
}else if ("".equals(day.getText().toString().trim())) { 
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.noDayMsg), Toast.LENGTH_SHORT).show(); 
}else if ("".equals(month.getText().toString().trim())) { 
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.noMonthMsg), Toast.LENGTH_SHORT).show(); 
} else if ("".equals(year.getText().toString().trim())) { 
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.noYearMsg), Toast.LENGTH_SHORT).show(); 
}else{ 
     new Async.execute(); 
} 
相關問題