2010-11-05 22 views
0

Je suis relativement nouveau dans le monde d'Android et le modèle UI/Thread est encore confus.Est-ce la meilleure façon de montrer le contenu?

Voici ce que je suis en train de faire:

Charger des données à partir du Web Manipulez-les les Afficher Afficher un AlertDialog s'il y a un problème

que je fais actuellement comme ça, mais Je ne suis pas sûr que l'utilisation de nombreux threads de ce genre est la meilleure façon de le faire.

A l'intérieur du onCreate()

final ProgressDialog pd = ProgressDialog.show(this, "", loadingText, true); 
    final AlertDialog.Builder b = new AlertDialog.Builder(this); 

    new Thread(new Runnable() { 

    @Override 
    public void run() { 
    try { 
    loadResorts(); 
    } catch (ResortsRetrievalException e) { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     b.setMessage(R.string.resorts_retrieval_error) 
     .show(); 
     } 
    }); 
    } 
    pd.dismiss(); 
    } 
    }).start(); 

Et ma méthode loadResorts termine avec

final BaseAdapter a = new ResortAdapter(this, R.layout.resort_item, resorts); 

    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    resortsList.setAdapter(a); 
    } 
    }); 

J'ai un fil et deux appels de runOnUiThread pour cela. Je pense qu'il pourrait y avoir une meilleure solution sans avoir à faire face à ces discussions. Ai-je raison?

Merci

Répondre

1

utilisation AsyncTask - il a été créé pour ce genre de scénarios: l'exécution d'une tâche de fond ou d'un processus (long), en mettant à jour encore l'interface utilisateur de manière correcte (sur EDT).

+0

Merci Peter Je pensais que cela ne résoudrait pas mon problème, donc je n'ai pas vraiment essayé. Maintenant, si j'essaie d'utiliser AsyncTask. Je rencontre un autre problème \t protected void onPreExecute() { \t \t super.onPreExecute(); \t \t \t \t préfs = PreferenceManager.getDefaultSharedPreferences (getBaseContext()); \t} Comment obtenir le contexte? Merci – Jonas

+0

Vous devez le passer dans le constructeur. Lorsque vous étendez AsyncTask, créez un constructeur qui prend 'Context' comme paramètre. –

+0

Ho bien ... si je savais que c'était si facile ... Merci – Jonas