Autore Topic: AlertDialog dentro AsyncTask  (Letto 690 volte)

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
AlertDialog dentro AsyncTask
« il: 22 Gennaio 2013, 12:37:36 CET »
0
Questo è il codice del mio AsyncTask
Codice (Java): [Seleziona]
protected void onPreExecute() {
                        super.onPreExecute();
                        pDialog = new ProgressDialog(Login.this);
                        pDialog.setMessage("Attendere per il login..");
                        pDialog.setIndeterminate(false);
                        pDialog.setCancelable(true);
                        pDialog.show();
                }
                @Override
                protected String doInBackground(String... arg0) {
                        String email = inputEmail.getText().toString();
                        String password = inputPassword.getText().toString();
                       
               
                       
                        //creazione parametri
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("email", email));
                        params.add(new BasicNameValuePair("password", password));
               
                        JSONObject json = jsonParser.makeHttpRequest(url_create_product,"GET", params);
                       
                        Log.d("Create Response", json.toString());
                       
                        try {
                                        int success = json.getInt(TAG_SUCCESS);

                                        if (success == 1) {
                                                       
                                                        Intent i = new Intent(getApplicationContext(), Home.class);
                                                        startActivity(i);
                                                               
                                                       
                                                        //finish();
                                        } else {
                                                       
                                                pDialog.dismiss();
                                                AlertDialog.Builder alertbox = new AlertDialog.Builder(Login.this);
                                                alertbox.setNeutralButton("OK", null);
                                                alertbox.setMessage("Email o Password errata");
                                                alertbox.setIcon(android.R.drawable.ic_dialog_alert);
                                                alertbox.show();
                                                Log.i("login", "utente non trovato");
                                                        }
                                        } catch (JSONException e) {
                                                        e.printStackTrace();
                                        }
                        return null;
                }
                /**
                 * Terminare la progress dialog dopo che il background è completato
                 * **/

                protected void onPostExecute(String file_url) {
                        pDialog.dismiss();
                }
               
        }

da quando ho messo l'alertdialog che serve ad avvissare l'utente che la password o l'email è errata l'applicazione salta cosa sbaglio?
« Ultima modifica: 22 Gennaio 2013, 12:39:56 CET da sirtraco »

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:AlertDialog dentro AsyncTask
« Risposta #1 il: 22 Gennaio 2013, 17:56:20 CET »
0
Il doInBackground è eseguito su un thread separato, e non puoi toccare la UI da thread diversi dal principale.
Suppongo che istanziare una AlertDialog rientri in questa casistica.
Dovresti richiamarla nel onPostExecute.

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:AlertDialog dentro AsyncTask
« Risposta #2 il: 22 Gennaio 2013, 23:13:31 CET »
0
ma nel metodo onPostExecute come faccio a dirgli che l'AlertDialog deve comparire solo se l'utente non è stato trovato, visto che la variabile che lo certifica sta nel metodo doInBackground??

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:AlertDialog dentro AsyncTask
« Risposta #3 il: 22 Gennaio 2013, 23:39:24 CET »
0
I due metodi/threads comunicano tramite il ritornon del doInBackground , passato come parametro al onPostExecute.

Nel tuo caso mi pare di capire che il tutto dipenda solo dal valore booleano di success: quindi basta impostare come boolean il terzo generic del tuo Asynctask e ritornare il valore appropriato nel doInBackground, leggendolo poi nel onPostExecute e comportarsi di conseguenza.

In casi più complessi basta costruire un DTO molto semplice come terzo generic, che inglobi lo stato (in genere OK/KO) del risultato, magari un codice esplicativo (così da poter gestire i vari casi degli stati OK/KO: errore di connessione, di parsing ecc) ed eventualmente un oggetto rappresentante il risultato dell'elaborazione del onPostExecute.

Offline sirtraco

  • Utente junior
  • **
  • Post: 92
  • Respect: 0
    • Mostra profilo
Re:AlertDialog dentro AsyncTask
« Risposta #4 il: 23 Gennaio 2013, 11:13:55 CET »
0
non potresti scrivere un pò di codice in modo da rendermi tutto più chiaro? xD