2011-08-30 2 views
0

J'ai un Activity qui affiche un texte basé sur les données extraites du serveur MySQL. Le problème est que le Activity ne se chargera pas tant que les données ne seront pas tirées, ce qui prend parfois de longues secondes ou ne se charge même pas du tout, et en attendant, les utilisateurs obtiennent un écran noir.L'activité ne démarre pas tant que les données ne sont pas extraites du serveur MySQL.

J'ai essayé de passer la mission d'obtenir les données du serveur à un service, mais aussi il attend pour tirer les données et seulement alors montre la disposition du Activity.

J'ai également essayé de faire une activité avec du texte fixe, puis appelez le Activity qui extrait les données du serveur, mais le programme attend toujours les données. Pouvez-vous imaginer une solution créative pour cela?

ou peut-être un non créatif aussi bien :)

Répondre

1

vous pouvez utiliser AsyncTask pour cela:

http://developer.android.com/reference/android/os/AsyncTask.html

ou vous pouvez afficher une boîte de dialogue d'attente à l'utilisateur jusqu'à ce que vous obtenez vos données (le faire dans le thread séparé) .....

ou vous pouvez implémenter un écran de démarrage et là vous pouvez récupérer des données .....

+0

Merci! cette asyncTask fonctionne très bien! – BodyBuilder

0

Vous devez le faire dans un autre fil. Essayez d'utiliser la classe AsyncTask.

0

Le retard est probablement dû à l'appel d'extraction des données sur le thread principal, également appelé thread UI. Les processus qui prennent beaucoup de temps, et je veux dire par là même une seconde ou deux devraient être faits dans un fil séparé. Android fournit une classe appelée AsyncTask pour aider à rendre le threading indolore.

0

Vous avez mentionné avoir essayé un service, mais avez-vous consulté un service IntentService? (Je ne peux pas encore le lier, mais c'est sur d.android.com.) J'aime les utiliser pour ce genre de tâches car ils traitent le threading pour vous (comme une AsyncTask) et cela sépare mieux les problèmes. IntentService envoie ensuite un message de diffusion que l'activité détecte indiquant que les données sont disponibles ou non. Stockez les données localement dans un fichier sqlite ou dans un fichier json/xml.