Problème avec le pain grillé AsyncTask appel de la méthode

Hey Tout Le Monde,

J'ai une AsyncTask que les posts de certaines des données à un serveur. Il le fait par l'appel d'une méthode statique que j'ai écrit à partir de doInBackground. Quand je lance l'AsyncTask, j'envoie le contexte de l'activité qui a appelé execute(), que j'envoie à ma méthode statique, car il a besoin d'elle pour faire un Toast si quelque chose va mal, tout en parlant au serveur. Cependant, j'ai cette erreur lors d'un Toast est fait dans la méthode statique:

04-21 12:49:16.689: ERROR/AndroidRuntime(2123): FATAL EXCEPTION: AsyncTask #1
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): java.lang.RuntimeException: An error occured   while executing doInBackground()
04-21 12:49:16.689: ERROR/AndroidRuntime(2123):at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.lang.Thread.run(Thread.java:1019)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at android.os.Handler.<init>(Handler.java:121)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at android.widget.Toast.<init>(Toast.java:68)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at android.widget.Toast.makeText(Toast.java:23
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at com.microogle.dev.util.ServerConnections.PostToLoginPage(ServerConnections.java:36)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at com.microogle.dev.Whiteboard.WhiteboardLogin$LoginTask.doInBackground(WhiteboardLogin.java:150)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at com.microogle.dev.Whiteboard.WhiteboardLogin$LoginTask.doInBackground(WhiteboardLogin.java:1)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-21 12:49:16.689: ERROR/AndroidRuntime(2123): ... 4 more

Qui est suivie par une fuite de la fenêtre d'erreur. Je suis en supposant que c'est en raison d'une erreur avec le contexte passé pour le Toast dans la méthode statique. L'AsyncTask est:

private class LoginTask extends AsyncTask<Void, Void, Void> {
private WhiteboardLogin activity;
private Context callingContext;
private ProgressDialog dialog;
private String user, pass;
private boolean sendIntent = true, loginError = false, populateError = false;
public LoginTask(WhiteboardLogin activity, String user, String pass, Context callingContext){
this.activity = activity;
this.user = user.trim();
this.pass = pass.trim();
this.callingContext = callingContext;
}
@Override
protected Void doInBackground(Void... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("user",user));
nameValuePairs.add(new BasicNameValuePair("pass",pass));
sessionUser = user;
sessionPassword = pass;
//Posts the username and password to the login page and toasts an error if the login doesn't work 
if(ServerConnections.PostToLoginPage(callingContext, nameValuePairs, activity.getString(R.string.loginPageURI)) == 1){
dialog.dismiss();
sendIntent = false;
loginError = true;
publishProgress();
return null;
}
else{
userDataList = populateUserDataList(callingContext, user,pass);
if(userDataList == null){
dialog.dismiss();
sendIntent = false;
populateError = true;
return null;
}
}
return null;
}

OriginalL'auteur Eliezer | 2011-04-21