Урок 88. AsyncTask. Итоговый результат. Метод get

Обсуждение уроков
LazeR
Сообщения: 7
Зарегистрирован: 02 сен 2014, 17:57

Re: Урок 88. AsyncTask. Итоговый результат. Метод get

Сообщение LazeR » 09 сен 2014, 17:41

Разобрался, там идёт обратная связь

Necro
Сообщения: 2
Зарегистрирован: 01 ноя 2015, 14:39

Re: Урок 88. AsyncTask. Итоговый результат. Метод get

Сообщение Necro » 18 янв 2016, 06:02

Все привет.
У меня тут возник вопрос, не знаю как лучше делать.
В общем запускаю последовательно два asyncTask'a. На каждый, соответственно, нужно новый объект создавать.
А как удалять старые, что бы память не забивали?
Сейчас присваиваю старым NULL, а хорошее ли это решение? Подскажите как лучше делать?

вот кусок кода:

Код: Выделить всё

 GetData gt = new GetData();
    gt.execute("http://somediary.ru/get_washes.php?_mode=checkStatus&a1="+Integer.toString(idWash));

    try {
        res="-11";
        res = gt.get(7, TimeUnit.SECONDS);
        Log.d(LOG_TAG,res);
        if (TextUtils.equals(res, "0") ) {
            Log.d(LOG_TAG,"свободно, записываемся");
            gt = null;
            GetData upgt =new GetData();
            upgt.execute("http://somediary.ru/get_washes.php?_mode=tryToWash&a1="+Integer.toString(idWash) );
            res = upgt.get(7, TimeUnit.SECONDS); 
            Log.d(LOG_TAG,"вышли, результат = "+res);
    ...
Вот что с этим gt лучше сделать?

EugeneDev
Сообщения: 5
Зарегистрирован: 24 ноя 2016, 14:34
Откуда: Odessa

Re: Урок 88. AsyncTask. Итоговый результат. Метод get

Сообщение EugeneDev » 30 ноя 2016, 16:28

Всем привет, у меня есть БД в ней 2 связанные таблицы, в таблице есть дата создания события и мне нужно делать выборку по дате. Использую CursorLoader и SimpleCursorAdapter - без выборки все работает как надо, НО если задаю условие - ошибок нет, просто пустой экран, как будто условие не верное, хотя тут все четко. в чем может быть проблема?

Main - часть кода

Код: Выделить всё

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
        //Передаем в параметре Context context, DB db, int loaderIDPar
        return new MyCursorLoader(this, db, id);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        scAdapterTableInfo.swapCursor(cursor);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    }
Класс курсора

Код: Выделить всё

public class MyCursorLoader extends CursorLoader {
    DB db;
    int loaderID;
    Cursor cursor;
    MainActivity mainActivity = new MainActivity();
    

    public MyCursorLoader(Context context, DB db, int loaderIDPar) {
        super(context);
        this.db = db;
        this.loaderID = loaderIDPar;
    }

    @Override
    public Cursor loadInBackground() {
        //С помощью id понимаем какой лоадер запрашивается и возвращаем нужный курсор
        if (loaderID == Constants.LOADER_ID_TABEL_INFO) {
            String date = mainActivity.getMainDate();
            try {
                cursor = db.getJoinData(date);
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } else if (loaderID == Constants.LOADER_ID_TABEL_CATEGORY) {
            cursor = db.getAllData(db.TABLE_CATEGORY_NAME);
        }

        return cursor;

    }


}
Метод в котором формируем запрос

Код: Выделить всё

// получить данные из связных таблиц
    public Cursor getJoinData(String date) throws ExecutionException, InterruptedException {
        //Формируем общую таблицу
        String table = TABLE_INFO_NAME + " inner join " + TABLE_CATEGORY_NAME + " on "
                + TABLE_INFO_NAME + "." + INFO_TABLE_CATEGORY_ID + " = "
                + TABLE_CATEGORY_NAME + "." + CATEGORY_TABLE_ID;
        //Формируем столбцы
        //ОБЯЗАТЕЛЬНО НАДО СДЕЛАТЬ ОДНО ПОЛЕ С ПОМОЩЬЮ ALIASA "_id" - особенность SimpleCursorAdapter
        String[] columns = {TABLE_INFO_NAME + "." + INFO_TABLE_ID,
                TABLE_INFO_NAME + "." + INFO_TABLE_INFO,
                TABLE_INFO_NAME + "." + INFO_TABLE_SUMM,
                TABLE_INFO_NAME + "." + INFO_TABLE_CURRENCY,
                TABLE_INFO_NAME + "." + INFO_TABLE_DATE,
                TABLE_CATEGORY_NAME + "." + CATEGORY_TABLE_NAME};

        myTask = new MyTask();
        myTask.execute(date, table, columns);
        return myTask.get();
И сам класс наследник AsyncTask

Код: Выделить всё

    private class MyTask extends AsyncTask<String[], Void, Cursor> {

        String table;
        String [] colums;
        String date;

        @Override
        protected Cursor doInBackground(String[]... date) {

            return mDB.query(table, colums, INFO_TABLE_DATE + "= ?", new String[]{this.date}, null, null, null);
        }

        @Override
        protected void onPostExecute(Cursor cursor) {
            super.onPostExecute(cursor);
        }

        public void execute(String date, String table, String[] colums) {
            this.date = date;
            this.table = table;
            this.colums = colums;
        }
    }
После это запускается метод подсчета сумы (один из столбцов в Таблице) всех событий с условием выборки по дате НО в ОДНОЙ таблице - все четко работает и считает. Короче, помогите, где я налошарил? Спасибо.

EugeneDev
Сообщения: 5
Зарегистрирован: 24 ноя 2016, 14:34
Откуда: Odessa

Re: Урок 88. AsyncTask. Итоговый результат. Метод get

Сообщение EugeneDev » 01 дек 2016, 15:02

Разобрался, не отрабатывал АсинТакс из-за кривой передачи данных и как следствие не отрабатывал метод onLoadFinished(Loader<Cursor> loader, Cursor cursor)

bombey77
Сообщения: 2
Зарегистрирован: 09 май 2017, 07:55

Re: Урок 88. AsyncTask. Итоговый результат. Метод get

Сообщение bombey77 » 08 июн 2017, 00:06

Добрый день. Вчера сел попрактиковаться с AsynkTask и попробовал вынести класс с ним в другой файл, а не в Inner класс как в уроке. Помучился немного и понял, что не получается у меня никак обновлять UI в активити. Может кто-то подскажет реализацию или это не возможно в AsynkTask и нужно только копать в сторону Handler? Интересно все равно...

Ответить