Източникът не е намерен в AsyncTask.execute()

Опитвам се да се справя с AsyncTask.. какъв е моят проблем, че изграждах таблица с текстови изгледи динамично, въз основа на изхода от процедура.. Но тогава реших, че с помощта на asynctask мога да го направя по по-ефективен начин .. И така, това, което направих, е следното:

private class DisplayReport extends AsyncTask<Void, Void, Boolean>{
    protected void onPreExecute(){
        //Message -- "Please wait while the Report Loads..."
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        //Here i fetch the data from the procedure via a web service
        //parse the result of web service and set a bool variable true or false based on whether the dataset fetched is empty or not.
    }
    protected void onPostExecute(Boolean value){
        if(value == true){
                 "Please try again later!!"
        }
        else{
                 runOnUiThread(GenTable);
        }
    }
    private Runnable GenTable = new Runnable(){
        public void run(){
            try {
                displayReport(result); // in this method i build the table.
            } catch (Exception e) {
                ad.setTitle("Error..");
                ad.setMessage(e.toString());
            }
        }
    };
}

горният асинхронен клас е вътрешен клас в моя основен клас, който разширява дейността. и ето как изпълнявам asynctask..

DisplayReport dr = new DisplayReport();
dr.execute();

сега, когато отстранявам грешки, получавам "source not found" error on dr.execute().. Опитах да търся много в мрежата, но просто не мога да намеря нищо конкретно. Освен това, моля, уведомете ме, ако подходът ми е неправилен.. този въпрос може да изглежда много глупав, но аз съм нов в android и java също и всяка помощ ще бъде наистина страхотна..

Благодаря!


person Amruta    schedule 18.01.2013    source източник


Отговори (2)


Execute ще започне нова нишка. Не искате да отстранявате грешки в него. Вместо това поставете точки на прекъсване в onPreExecute, doInBackground и onPostExecute и можете да видите кога всяка от тях се извиква.

person Gabe Sechan    schedule 18.01.2013
comment
Също така, onPostExecute винаги се изпълнява в нишката на потребителския интерфейс, така че не е необходимо да извиквате runOnUiThread там. Само doInBackground се изпълнява в другата нишка. - person Gabe Sechan; 18.01.2013

onPostExecute вече се изпълнява в нишката на потребителския интерфейс, така че не трябва да създавате друго изпълнение за него. Просто направете своя onPostExecute така:

 protected void onPostExecute(Boolean value){
            if(value == true){
                     String message = "Please try again later!!";
                     // Do something here with your message
            }
            else{
                     displayReport(result);
            }
        }
person Lawrence Choy    schedule 18.01.2013
comment
Благодаря! Ще се опитам да се свържа, ако имам още проблеми :) - person Amruta; 18.01.2013
comment
Предполагам, че дори doInBackground също не се изпълнява.. Задействам заявка в него и тя не се отразява в sql профилиращия инструмент.. - person Amruta; 18.01.2013