Урок 136. CursorLoader

Обсуждение уроков
Afdenis
Сообщения: 5
Зарегистрирован: 30 окт 2014, 16:19

Re: Урок 136. CursorLoader

Сообщение Afdenis » 12 ноя 2014, 09:32

Пытаюсь применить этот урок к своему проекту. У меня тоже не получается победить getSupportLoaderManager().initLoader(0, null, this); Хоть убей подчеркивает его красным. Поддержку compile 'com.android.support:support-v4:21.+' добавил, в импорте указал:
import android.app.Activity;
import android.app.DialogFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SeekBar;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.TextView;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

Что ему еще надо?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 136. CursorLoader

Сообщение klblk » 12 ноя 2014, 10:28

я же говорю унаследуй свое активити не от класса Activity, а от FragmenActivity из support lib:
[syntax=java]public class MainActivity extends FragmentActivity [/syntax]

Afdenis
Сообщения: 5
Зарегистрирован: 30 окт 2014, 16:19

Re: Урок 136. CursorLoader

Сообщение Afdenis » 12 ноя 2014, 10:33

Да, уже прочитал Ваше сообщение, спасибо, помогло :)

Afdenis
Сообщения: 5
Зарегистрирован: 30 окт 2014, 16:19

Re: Урок 136. CursorLoader

Сообщение Afdenis » 12 ноя 2014, 11:41

А подскажите еще пожалуйста, как обработать нажатие на элемент списка? Активити назначил слушателем AdapterView.OnItemClickListener, затем на список повесил слушателя rdlistview.setOnItemClickListener(this); ну и система сама создала

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

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.d(LOG_TAG, "-------------Clicked----------------");
}
Однако при нажатии на элемент списка в лог ничего не выводится.
Влияет ли как-то на это событие то, что ListView создается на основе самописного layout?

Afdenis
Сообщения: 5
Зарегистрирован: 30 окт 2014, 16:19

Re: Урок 136. CursorLoader

Сообщение Afdenis » 12 ноя 2014, 14:56

Вопрос снят, какая-то проблема с layout файлом была, создал заново и все заработало

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 10:54

Всем привет!

Я так понимаю, все обращения к БД нужно делать в отдельном от UI потоке (особенно много времени у меня занимает большой update).

В уроке показано, как через CursorLoader получать cursor после sql query и как "апдейтить" cursor после операции delete. Query при этом правильно делается в отдельном потоке.

А как в отедельном потоке делать остальные операции с БД - update, delete, insert?

Там будет другой Loader?
Arbeit macht Fry

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 29 янв 2015, 11:05

какой еще "большой апдейт"?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 11:17

В смысле insert )

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

   ContentValues cv = new ContentValues();
        for (int i = 0; i < 2000; i++) {
            cv.put(COLUMN_TEXT, "Запись № " + i);
            mDB.insert(TABLE_NAME, null, cv);
        }
Ну не важно ) В общем, вопрос про операции sql insert, update, delete. Как их лучше вывести в другой поток через loader?
Arbeit macht Fry

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 29 янв 2015, 11:43

важно
делай в транзакции такие инсерты - и будет все за мгновение происходить
а вообще для операций с бд нужно использовать контент-провайдер
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 136. CursorLoader

Сообщение doter.ua » 29 янв 2015, 12:20

Fry писал(а):В смысле insert )

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

   ContentValues cv = new ContentValues();
        for (int i = 0; i < 2000; i++) {
            cv.put(COLUMN_TEXT, "Запись № " + i);
            mDB.insert(TABLE_NAME, null, cv);
        }
Ну не важно ) В общем, вопрос про операции sql insert, update, delete. Как их лучше вывести в другой поток через loader?
static соединение. (перед юзом проверяй на нул).
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 12:22

Foenix писал(а): а вообще для операций с бд нужно использовать контент-провайдер

А что даст контент-провайдер?
Как его использование решит проблемы вывода операций из UI потока?
Arbeit macht Fry

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 136. CursorLoader

Сообщение doter.ua » 29 янв 2015, 12:34

Fry писал(а):
Foenix писал(а): а вообще для операций с бд нужно использовать контент-провайдер

А что даст контент-провайдер?
Как его использование решит проблемы вывода операций из UI потока?
Провайдер нужен для шаринга данных другим приложениям.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 12:37

Это - одна из фич ) Но вопрос был не в этом.
Arbeit macht Fry

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 136. CursorLoader

Сообщение doter.ua » 29 янв 2015, 12:49

Fry писал(а):Это - одна из фич ) Но вопрос был не в этом.
Приложения в разных процессах работают, соответственно и с разными потоками.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 12:57

doter.ua писал(а): Приложения в разных процессах работают, соответственно и с разными потоками.
А если у меня одно приложение, и в нем реализуется ContentProvider - тогда процессы тоже разные?
Arbeit macht Fry

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 29 янв 2015, 12:58

Fry писал(а):
Foenix писал(а): а вообще для операций с бд нужно использовать контент-провайдер

А что даст контент-провайдер?
Как его использование решит проблемы вывода операций из UI потока?
Это просто самый лучший и современный подход, ничего сложного нету в его реализации. А для вставки записей используй просто асинктаск или thread - что тут сложного
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 29 янв 2015, 13:00

Fry писал(а):
doter.ua писал(а): Приложения в разных процессах работают, соответственно и с разными потоками.
А если у меня одно приложение, и в нем реализуется ContentProvider - тогда процессы тоже разные?
Контент провайдер, вернее ContenResolver работает в том же потоке, что и вызывающий поток.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 13:01

Foenix писал(а): Это просто самый лучший и современный подход, ничего сложного нету в его реализации. А для вставки записей используй просто асинктаск или thread - что тут сложного
А какой-либо Loader стоит использовать?
Arbeit macht Fry

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 29 янв 2015, 13:06

конечно нужно! если ты грузишь данные - то используй лоадер,
если вставка - транзакция обязательная для множественной ставки - раз, и
http://developer.android.com/reference/ ... ndler.html
попробуй это использовать для одиночных вставок
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 136. CursorLoader

Сообщение Fry » 29 янв 2015, 13:26

Foenix, не очень тебя понял тут.
Foenix писал(а): если вставка - транзакция обязательная для множественной ставки - раз,
Что использовать для транзакций?

И сорри за глупый вопрос :). Ты прод транзакикциями понимаешь это?

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

query = "Insert into " +TABLE_NAME+ "("+ COLUMN_TEXT + ") VALUES ('Запись № " + i + "')";
      mDB.execSQL (query);
И почему Content Resolvers стоит использовать для одиночных вставок, а не для множественных?
Arbeit macht Fry

Ответить