D.....s
D.....s
#androiddev #programowanie #sqlite
Piszę malutką apkę używającą SQLite, z którego dane wyświetlać ma RecyclerView, ale mam problem, bo wyskakuje mi komunikat: TaskDBHelper.getAllItems()' on a null object reference.
Jest to moje pierwsze zetknięcie z SQLite, więc za Chiny ludowe nie mam pojęcia gdzie zrobiłem błąd.

Rzeczona metoda:
public Cursor getAllItems() {
return mDatabase.query(
TaskContract.TaskEntry.TABLENAME,
null,
null,
null,
null,
null,
TaskEntry.COLUMN
DATE + "DESC"
);
}

Wywołanie w onCreate:
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mMainAdapter = new MainAdapter(this, mTaskDBHelper.getAllItems());
recyclerView.setAdapter(mMainAdapter);
  • Najlepsze
  • Wszystkie komentarze
D.....s
D.....s
@DanielAquarius:
Adapter:
MainAdapter(Context context, Cursor cursor) {
mContext = context;
mCursor =
maciek30_pl
@DanielAquarius: nie lepiej użyć Realma? A jeśli koniecznie SQLite, to może jakaś forma Biblioteki do jego obsługi?
another_throwaway23
mMainAdapter = new MainAdapter(this, mTaskDBHelper.getAllItems());


@DanielAquarius: wygląda na to, że mTaskDBHelper jest niezainicjalizowany w onCreate
D.....s
D.....s
@maciek30_pl: Bardziej polecany niż SQLite? Zależy mi żeby ogarnąć jakąś lokalną bazę danych.
another_throwaway23
@DanielAquarius: i nie przekazuj Activity jako Context do Adaptera. Context w adapterze możesz zawsze uzyskać poprzez ViewHolder.getView().getContext()
maciek30_pl
@DanielAquarius: na pewno dużo dużo prostszy w obsłudze przy małych bazach. Jest pełno tutoriali do tego, a jak byś miał pytania to pisz śmiało :)
D.....s
D.....s
@another_throwaway23: Rzeczywiście, pominąłem to.
Najpierw zrobiłem tak:

TaskDBHelper dbHelper = new TaskDBHelper(this);
mDatabase =
D.....s
D.....s
@maciek30_pl: Powalczę jeszcze chwilę z tym, może się przydać, ale skoro piszesz, że Realm lepszy to nie omieszkam sprawdzić. Realm jest znacznie częściej używany w pracy programisty Androida?
another_throwaway23
@DanielAquarius: generalnie jakiekolwiek ORM nad gołą bazą jest bardziej pożądane. Sprawdź ten Realm, można też zerknąć na Room.

co do tych NPE, to musisz debuggerem się pobawić sam po prostu i znaleźć czego w porę nie inicjalizujesz.

Nie inicjację, tylko inicjalizację. Tak, przekazujesz tam Activity do adaptera co zapewne spowoduje Ci wyciek pamięci. Jeżeli jest Ci koniecznie potrzebny kontekst wewnątrz adaptera to niech to będzie kontekst całej aplikacji. Ale w
maciek30_pl
@DanielAquarius: różnie to bywa, warto wiedzieć jak ogarnąć SQLite.
Ale faktycznie, wszystkie projekty komercyjne od 2 lat, w których uczestniczyłem są oparte o Realma :)
D.....s
D.....s
@maciek30_pl: Więc już wiem co następne przyswajać. Dzięki!
maciek30_pl
@DanielAquarius: https://github.com/mkAndroDev/GdzieBylem - to pisałem baaardzo dawno temu ale jest oparte o SQLite :)

https://github.com/mkAndroDev/SimpleRemoteController - to jest napisane bardzo brzydko, ale z Realmem :)
ra_s
ra_s
0
D.....s
D.....s
@maciek30_pl: Rzeczywiście, wygląda to o niebo lepiej. Odstawię na razie SQLite i zrobię coś wykorzystującego Realm. Jeszcze raz dzięki!
D.....s
D.....s
@ra_s: Właśnie sobie przeglądam co i jak i też wygląda korzystniej w porównaniu do SQLite. Porobię coś z Realm i zobaczę też Twoją propozycję. Dzięki.
ra_s
ra_s
0
@DanielAquarius: Kolego :) The Room persistence library provides an abstraction layer over SQLite :) pierwsze zdanie :) Ale uczysz się wiec ok :)
D.....s
D.....s
@ra_s: Spokojnie, to przeczytałem i nawet przejrzałem przykłady ;)