AsyncTask – après l'exécution, comment mettre à jour la vue?

Dans l'événement onCreate () d'une Activité, j'ai commencé un AsyncTask pour récupérer les données de Produit à partir d'une base de données. Une fois que cela a été terminé avec succès, comment puis-je mettre à jour l'affichage?

Metacode:

  • Webcal: // soutien sur Android ne fonctionne pas - existe-t-il une alternative d'alimentation de calendrier prise en charge
  • Android.view.InflateException: ligne de fichier XML binaire n ° 6: Erreur de gonflement de classe fragemnt
  • Mise hors tension de l'appareil Android avec une application signée par système
  • NDK vs performance JAVA
  • Comment gérer l'effet Ripple sur 9-patch et CardView, et contrôler les états du sélecteur?
  • Les champs statiques dans les classes d'activité sont-ils garantis pour survivre à un cycle de création / destruction?
  • public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.venueviewbasic); (..) new GetProductDetails().execute(); class GetProductDetails extends AsyncTask<String, String, String> { protected String doInBackground(String... params) { // updating UI from Background Thread runOnUiThread(new Runnable() { public void run() { // Check for success tag int success; try { // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("id", vid)); (.. retrieve and parse data and set new textview contents ..) 

    Les aperçus de texte etc. ne sont pas mis à jour cependant.

  • Comment désactiver le renvoi de port adb?
  • Comment utiliser putExtra () et getExtra () pour les données de chaîne
  • Commutateur compatible vers l'arrière
  • Dépendances variantes de variantes de plugin android: méthode DSL introuvable
  • Ajout de contrôles de luminosité de l'écran à l'application Android
  • Chiffrer la base de données SQLite sans augmenter la taille de l'application?
  • 3 Solutions collect form web for “AsyncTask – après l'exécution, comment mettre à jour la vue?”

    Si vous souhaitez mettre à jour la vue depuis l'async après le processus complet, vous pouvez utiliser

     protected void onPostExecute(String result) { textView.setText(result); } 

    Mais si vous souhaitez mettre à jour les données lors de l'exécution du processus d'arrière-plan, utilisez. Pour ex …

     protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100));<------ } return totalSize; } protected void onProgressUpdate(Integer... progress) { <------- setProgressPercent(progress[0]); } 

    Pour plus de détails, voir ce lien Espérons que cela vous aidera …!

    Je suppose que la question est plus sur la façon de saisir l'UI. Voir si l'asyncTask est dans un fichier distinct.

    Dans ce cas, vous devez passer le contexte à la tâche Async et l'utiliser pour obtenir la vue.

     class MyAsyncTask extends AsyncTask<URL, Integer, Long> { Activity mActivity; public MyAsyncTask(Activity activity) { mActivity = ativity; } 

    Et ensuite, dans votre utilisation onPostExecute

     int id = mActivity.findViewById(...); 

    Rappelez-vous que vous ne pouvez pas mettre à jour la vue depuis "doInBackground" car ce n'est pas le thread UI.

    Dans votre classe AsyncTask , ajoutez une méthode onPostExecute . Cette méthode s'exécute sur le thread UI et peut mettre à jour tout composant UI.

     Class GetProductDetails étend AsyncTask <...> 
     {
         ...
         TextView texte privé;
         ...
         Protected void surPostExecute (String result)
         {
             TextView.setText (résultat);
         }
     }
    

    (Le paramètre result est la valeur renvoyée de la méthode doInBackground de votre classe.)

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.