Android: проблема исключения Asyctask - PullRequest
0 голосов
/ 16 августа 2011

Я пишу свой первый класс 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 ]

2 голосов
/ 16 августа 2011

Я думаю, что вы обновляете некоторый пользовательский интерфейс своего приложения в Asyntask, если так, то удалите его

0 голосов
/ 16 августа 2011
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()

, и другая вероятность может быть,

logoutuser.logOut();    

вышеупомянутая строка может начинать другой поток, избегайте, если вы делаете это.найти другой способ ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...