2013-06-05 3 views
0

Tout d'abord, quelques informations sur mon projet:résultat retour de AsyncTask à un fragment

J'ai une application qui se compose de plusieurs fragments. (J'ai une classe qui étend FragmentActivity et une autre qui étend FragmentPagerAdapter.) Donc effectivement mon code est en cours d'exécution à l'intérieur des fragments. J'appelle une asynctask à l'intérieur d'un des fragments pour faire quelques calculs. AsyncTask est un fichier séparé et la classe ne se trouve pas dans la classe Fragment.

Donc 1 fichier est l'asynctask et un autre le fragment (les variables du fragment ne sont pas accessibles directement par l'asynctask !!!).

Je peux afficher le résultat de la tâche asynchrone en utilisant ProgressDialog. Cependant, je veux être en mesure de retourner les données (résultat de l'asynctask) à une variable que j'ai dans mon fragment. Ce que j'ai essayé jusqu'à présent est:

  1. utilisant get() de asyncatask.execute()

J'ai essayé de le faire comme ceci:

J'ai utilisé le code suivant qui a été appelé après un clic sur un bouton. Cependant, le thread principal reste bloqué et attend la fin de la tâche asynchrone.

2.Grâce loginSharePreferens

loginPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); 
      loginPrefsEditor = loginPreferences.edit(); 
      loginPrefsEditor.putString("result", result); 
      loginPrefsEditor.commit(); 

Cela m'a donné des erreurs.

3.I a également essayé cette
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

qui était similaire à la méthode 2.

4.I a essayé de créer une méthode dans mon fragment qui vient de mettre la valeur et j'ai essayé de l'appeler à l'intérieur du fragment

MyFrragment1.this.setRestult(1); // is called in the onPostExecute of the asyncTask 

public void setRestult(int result){ 
     this.test1=result; ///inside of the fragment 
    } 

Cela m'a donné l'erreur: « Aucune instance englobante du type MyFragment1 est accessible dans la portée "

Je ne sais pas quoi d'autre à essayer. Des idées ?

+0

http://stackoverflow.com/questions/16627492/how-to-return-an-object-to-the-fragment-from-a-nested- static-asynctask/similar question – Raghunandan

+0

@Raghunandan Je pense que le lien que tu m'as donné fait l'inverse. Je veux récupérer le résultat de l'asynctask à mon fragment –

+0

Aussi, ma situation est différente, je n'ai PAS l'asynctask à l'intérieur du fragment mais séparément –

Répondre

6

Vous pouvez utiliser la méthode onPostExecute qui s'exécute dans le thread UI et qui est appelée après les finitions doInBackground. Vous pouvez remplacer dans votre Fragment comme ceci:

new myAsyncTask() { 

     @Override 
     protected void onPostExecute(Result result) { 

      super.onPostExecute(result); 
      // Do something with result here 
     } 
    }.execute(value1); 
+0

Merci !!!! Ça marche! :) –

+0

Vous monsieur, m'a sauvé des heures et des heures! Merci beaucoup)) – Sermilion

Questions connexes