Android AsyncTask en classe externe
Je travaille sur une application et j'ai réussi à obtenir le AsyncTask
fonctionne bien quand elle est à l'intérieur de la classe.
Maintenant, je suis refactoring du code, afin que les AsyncTask
est dans une classe séparée de son propre, mais je me demande, comment puis-je tuer le ProgressDialog
et de commencer une nouvelle Activité une fois que la tâche est terminée avec succès? J'ai essayé de démarrer une nouvelle Activité dans le onPostExecute(..)
méthode, mais je sais que ça ne marchera pas.
En passant mon thread de l'INTERFACE utilisateur de l'activité comme un argument dans le constructeur de la AsyncTask n'a pas l'air de fonctionner:
//In UI Thread I had
public class Test101 extends Activity {
private Button btnLogin;
private LoginTask mLoginTask;
private Context context=this;
private Test101 mTest101;
mLoginTask=new LoginTask(context,mTest101);
mLoginTask.execute(null);
//In the AsyncTask I had
Activity mParentActivity;
public LoginTask(Context context,Activity act){
this.ctx=context;
this.mParentActivity=act;
}
onPostExecute(..){
mParentActivity.callSomeMethod();
}
...
}
J'ai continué à obtenir une NullPointerException
, peut-être que je manque quelque chose, mais cela n'a pas fonctionné pour moi.
OriginalL'auteur jwesonga | 2010-03-04
Vous devez vous connecter pour publier un commentaire.
Au lieu de passer 2 paramètres d'une seule comme ceci:
AsyncTask Code:
Est le passage du
Activity
comme un paramètre préfèrent passer en tant queContext
, commepublic LoginTask(Context context){...}
?Pas de. Vous devez passer le Contexte de l'Application afin d'éviter les fuites. Mais si vous avez besoin d'un rappel, vous avez besoin de passer la référence à elle.
OriginalL'auteur neteinstein
Tout ce qu'il faut pour démarrer une nouvelle Activité est l'objet de contexte que vous passer dans le constructeur de la
AsyncTask
:Si vous passez l'activité dans le constructeur dans la
AsyncTask
et essayez d'appelerstartActivity(Intent intent)
vous obtiendrez toujours une exception de pointeur null.OriginalL'auteur jwesonga
OriginalL'auteur Vinod Joshi
passer l'Activité en tant que paramètre du constructeur de votre AsyncTask et de le conserver dans un champ. c'est effectivement ce qu'est un intérieur de classe a vous (seul le compilateur pourrait écrire le code pour vous).
OriginalL'auteur Elliott Hughes
Utiliser Android Annotations pour AsyncTask facile, rapide et simple!
OriginalL'auteur Pierry
mTest101 n'est pas initié.
C'est juste nul... Donc vous pouvez voir la seule exception de pointeur null et c'est la chose ordinaire. Ou vous pouvez faire du statique de la méthode pour bien fonctionner sans déclencher la classe.
OriginalL'auteur dong woo lee