2011-08-16 10 views
0
私は私の最初のasyctaskクラスを書くことが、例外で終わるよ

アンドロイド:Asyctask例外問題

私asyctaskクラス(インナークラス)

 private class LogoutUser extends AsyncTask<Double, Void, Void>{ 

     @Override 
     protected Void doInBackground(Double... params) { 
      validateuser logoutuser = new validateuser(); 
      logoutuser.logOut();  
      return null; 
     } 

それは

logout.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       ProgressDialog dialog = new ProgressDialog(homepage.this); 
       dialog.setMessage("Loading..."); 

       dialog.show(); 
       //validateuser logoutuser = new validateuser(); 
       //logoutuser.logOut(); 
       new LogoutUser().execute(10.00, 10.00); 

       Intent loginscreen = new Intent(homepage.this, Login2.class); 
       loginscreen.setFlags(0x04000000); 
       startActivity(loginscreen); 
       dialog.cancel(); 


      } 
     }); 

と呼ばれる場所例外があります。

08-16 16:22:54.167: ERROR/AndroidRuntime(714): FATAL EXCEPTION: AsyncTask #1 
08-16 16:22:54.167: ERROR/AndroidRuntime(714): java.lang.RuntimeException: An error occured while executing doInBackground() 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.lang.Thread.run(Thread.java:1019) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at android.os.Handler.<init>(Handler.java:121) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at android.app.Activity.<init>(Activity.java:680) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at a.b.Login2.<init>(Login2.java:40) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at a.b.validateuser.logOut(validateuser.java:127) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at a.b.homepage$LogoutUser.doInBackground(homepage.java:450) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at a.b.homepage$LogoutUser.doInBackground(homepage.java:1) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
08-16 16:22:54.167: ERROR/AndroidRuntime(714):  ... 4 more 

公式のドキュメントが私の要件に合っていないので、私は私の書き込みを始めて例外を伴います。あなたが援助できるかどうかを見てください。

ありがとうございます。

答えて

2

私は、そう、それに

+0

ログアウトユーザータスクはログアウトするWebサービスのみを呼び出すUIスタッフには関係しません。それは鐘を鳴らしますか? –

+0

validateuser.logOut(validateuser.java:127) この行を参照validateuserの127行目 –

+0

yep datは助けました:) –

0
loginscreen.setFlags(0x04000000);//this flag kills the Activity, before starting another, so dialog //is cancelled already 
       startActivity(loginscreen); 
       dialog.cancel();//this could be a problem line 

を削除する場合は、そのdialog.cancel()

を削除し、別の確率は可能性があり、AsyntaskであなたのapplicaitonのいくつかのUIを更新している

logoutuser.logOut();  

考えます上記の行が別のスレッドを開始している可能性があります。他の方法を見つける..

+0

ありがとうございましたが、動作しませんでした。私は以下の答えで問題を理解しました。 –