#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.
@DanielAquarius: i nie przekazuj Activity jako Context do Adaptera. Context w adapterze możesz zawsze uzyskać poprzez ViewHolder.getView().getContext()
@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?
@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
@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 :)
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.COLUMNDATE + "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);
Adapter:
MainAdapter(Context context, Cursor cursor) {
mContext = context;
mCursor =
@DanielAquarius: wygląda na to, że mTaskDBHelper jest niezainicjalizowany w onCreate
Najpierw zrobiłem tak:
TaskDBHelper dbHelper = new TaskDBHelper(this);
mDatabase =
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
Ale faktycznie, wszystkie projekty komercyjne od 2 lat, w których uczestniczyłem są oparte o Realma :)
https://github.com/mkAndroDev/SimpleRemoteController - to jest napisane bardzo brzydko, ale z Realmem :)