Источник не найден в 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());
            }
        }
    };
}

вышеприведенный асинхронный класс является внутренним классом в моем основном классе, который расширяет активность. и вот как я выполняю асинтаск..

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