I have used Android's SQLite
before but I have always managed rows of data manually, so I never used classes like SimpleCursorAdapter
. I want to start using them now, but I need a little help in the code implementation, since it says I HAVE to use a CursorLoader
. I decided I'm using SQLiteCursorLoader
library.
Here are the details:
I have a table called students
in the SQLite database. Also, Student
model class and StudentManager
controller class. Calling StudentManager#getAll()
returns a Cursor
containing all the students.
Let's move to the Fragment
. I am not using ListFragment
for versatility. Anyway, until now I have the following inside onCreate
:
studentCursor = studentManager.getAll();
String[] from = new String[] { EventManager.COLUMN_TITLE };
String[] to = new String[] { R.id.title };
cursorAdapter = new SimpleCursorAdapter(this, R.layout.row_events, eventCursor, from, to, 0);
Then, I'd have an AsyncTask
subclass which will retrieve data from a RESTful API.
@Override
public void doInBackground() {
// code to get an array of students
for(Student student in students) {
studentManager.save(student);
}
}
The question would be, in which part would I use the SQLiteCursorLoader
and what for
EDIT: The question is more likely to be something like this: I am already implementing my own AsyncTask
operation cause I'm retrieving and managing all the data from a server. So, if I am already managing the data in a secondary thread thanks to doInBackground
, do I need still SQLiteCursorLoader
for any operation?
So, if I am already managing the data in a secondary thread thanks to doInBackground, do I need still SQLiteCursorLoader for any operation?
Probably not. The point of a Loader
is to load data asynchronously. If you are doing that yourself, a Loader
will not somehow make it more asynchronous. :-)
Just remember that if you change your data, you will need to run a new AsyncTask
to update your UI to reflect the changed data, such as by retrieving a fresh Cursor
. A CursorLoader
does that automatically; a SQLiteCursorLoader
only does that "automatically" if you run the database operation through the loader itself.