All streams
Search
Write a publication
Pull to refresh
50
0
Andreev Dmitry @app-z

User

Send message
Как правило, bulkInsert применяется для первоначального наполнения контент провайдера

Да именно это и имел в виду. Иногда надо небольшими пачками дописывать. Использовал действительно только в одном месте и был уверен
Даже скажу применил
long id = db.insertWithOnConflict(TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_REPLACE);

Все же думаю попробовать UcaOrm
Подкупило описание на хабре из трех статей стэб бай стэп так сказать. Описано именно то что требовалось в проекте, а также сверх.
MIT лицензия!

Спасибо!
Попробовал. Теперь notifyDataSetChange. В onMeasure без падения и хака.
Однако с прокруткой проблемы остались. Ее не стало после переопределения onMeasure. Если список превышает размер экрана, записи просто гдето внизу и недоступны.
Опять же из статей wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1
@Override
     public boolean canScrollVertically() {
         //We do allow scrolling
           return true;
     }

И надо переопределить

@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,
        RecyclerView.State state) {
...

Не пробовал это
1000 записей добавить, через транзакцию делать самому?

dataBase.beginTransaction();
...
dataBase.insert
...
dataBase.setTransactionSuccessful();
dataBase.endTransaction();


И что будет с ContentObserver на курсоре. Именно bulkInsert решал проблему дергания 1000 раз в приведенном примере 1000 запросов

Встретил в ваших примерах знакомую конструкцию)
Подумал внутри что то подобное…

    public class DoTask implements Callable<Object> {
        public Object call() {
            return retDo;
        }
    }

storIOSQLite
  .get()
  .listOfObjects(Tweet.class)
  .withQuery(Tweet.ALL_TWEETS_QUERY)
  .withMapFunc(Tweet.MAP_FROM_CURSOR)
  .prepare()
  .createObservableStream() // here is the magic! It will be subscribed to changes in tables from Query
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(new Action1<List<Tweet>>() {
    @Override public void call(List<Tweet> tweets) {
      // display the data
      // magic: this will be called on each update in "tweets" table
    }
  });

Это конечно круто. Как понимаю внутри Callable interface?
А что на счет добавления группы записей?
В ContentProvider можно использовать bulkInsert для этого
 @Override
    public int bulkInsert(Uri uri, ContentValues[] values) {
    ...

Как у вас организовано?
Хорошо бы пример использования такого случая…
Вы правы! Первоначальная цель была посмотреть как получится, потом интересно ли вообще в использовании.
Retrofit сам по себе умеет делать асинхронные запросы. Поэтому оборачивать его дополнительно в AsyncTaskLoader не требуется. Если конечно не использовать не асинхронный вызов.
Второе, на сколько понял из кода используется общий callback
public class MyActivity extends Activity implements Callback<List<Issue>> {

Или нет?
static class IssuesLoader extends RetrofitLoader<List<Issue>, GitHub> {

Сразу с ходу без исследования, за минуту не понять
Я же хотел именно что бы было понятно за минуту и запуск в одну строку. Ну почти в одну)
В вашем примере есть
@Inject
    GitHub gitHubService;

Тут явно более сложная реализация или даже сказать применение. Может быть ее и удобнее и полезнее было применить в вашем случае
Согласен с вами! С проверкой и без преобразования

public void start(int loaderId, final FragmentActivity context) {
    ....
    assert context instanceof FragmentActivity : "Run possible only from FragmentActivity";
    context.getSupportLoaderManager().restartLoader(loaderId, bundle, callback);
}
Судя по вашей логике сама концепция Loaders's это эксперимент
Обмен с Cursor реализовать через ContentProvider и локальную базу данных. AsyncTaskLoader тогда тоже не нужен, все в Servis переносим

Кеширование Loader как раз позволяет реализовать
Предзагрузка, это в какой момент? После включения телефона? Loader можно запустить в Activity.onCreate
Вы предлагаете держать сервис в фоне и общаться с ним?
developer.android.com/guide/components/services.html
Поделитесь идеей подробнее
Проблема не решилась. Пришлось через SQLiteDatabase.CustomFunction пробрасывать

private final SQLiteDatabase.CustomFunction mLowerFnc =
                         new SQLiteDatabase.CustomFunction() {
                 @Override
                 public String callback(String[] args) {
                     String text = args[0];
                     text = text.toLowerCase();
                     Log.d(LOG, "LOWER_FNC : " + text);
                     return text;
                }
        };



Ну и добавить функцию

database.addCustomFunction("LOWER_FNC", 1, mLowerFnc);

Information

Rating
Does not participate
Registered
Activity

Specialization

Mobile Application Developer
Senior
Git
English
Linux