Une de mes activités envoie une requête http à un service Web pour obtenir des données météorologiques lorsque je démarre l'application.Android: l'activité est trop longue à afficher à cause du service Web Demande Http
Le problème que l'activité mettra 3-4 secondes à afficher en raison de la demande de service Web. (Testé sur l'appareil actuel)
Je sais que je ne fais pas cela de la bonne façon. Tout ce que je fais est sur la méthode onCreate, je fais la demande, récupérer le xml, analyser et afficher les données.
Quelle est la meilleure façon de traiter les demandes de service Web dans Android afin que l'application n'affiche pas un écran blanc pendant que la demande est faite? Peut-être quelques threads .......
Je sais que cela ne se produit pas sur d'autres applications que j'ai dans mon appareil qui font une demande pour obtenir des données en direct.
Notes:
1) Le xml je revenir est pas grand (5 éléments avec 5 éléments imbriqués sur chacun).
2) J'ai essayé avec le réseau 3G et Wifi mais le temps de réponse est toujours le même.
exemple de code:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.clock_weather);
// this is where it is making the request and parsing the xml.
WeatherSet set = getWeatherCondition("New York, NY");
TextView currentWeather = (TextView) findViewById(R.id.current_weather);
currentWeather.setText("" + set.getWeatherCurrentCondition().getTempFahrenheit());
TextView currentWeatherH = (TextView) findViewById(R.id.current_weatherH);
currentWeatherH.setText("H: " + set.getWeatherForecastConditions().get(0).getTempMaxFahrenheit());
TextView currentWeatherL = (TextView) findViewById(R.id.current_weatherL);
currentWeatherL.setText("L: " + set.getWeatherForecastConditions().get(0).getTempMinFahrenheit());
ImageView currentWeatherIcon = (ImageView) findViewById(R.id.current_weather_icon);
String imageUrl = set.getWeatherCurrentCondition().getIconURL();
Drawable bitmapDrawable = getImageBitmap(imageUrl);
currentWeatherIcon.setImageDrawable(bitmapDrawable);
setForecastInfo(set, R.id.day1, R.id.day1_icon, R.id.day1_temp, 1 );
setForecastInfo(set, R.id.day2, R.id.day2_icon, R.id.day2_temp, 2 );
setForecastInfo(set, R.id.day3, R.id.day3_icon, R.id.day3_temp, 3);
setForecastInfo(set, R.id.day4, R.id.day4_icon, R.id.day4_temp, 4 );
}
Merci à tous pour les réponses rapides et grands. – Sammy
J'ai une question. Lorsque j'ouvre l'application de construction HTC dans la météo ou toute autre application météo du marché, elle ne montre aucune barre de progression et ne prend pas le temps de montrer la réponse. Serait-il en train de montrer des données anciennes et de les actualiser en arrière-plan après le lancement de l'activité? Serait-il acceptable de faire quelque chose comme ça pour une activité météorologique? – Sammy
Ce n'est tout simplement pas le show progressialog. Vous pouvez le faire, mais sachez qu'il affichera des valeurs par défaut ou quelque chose de différent jusqu'à ce que l'AsyncTask définisse ce que vous changez (dans le onPostExecute) – Rob