Most of the question is rather subjective. But let me take a stab at it
Where is the best place to create the SQLiteOpenHelper instance? I
readed about this, and seems that the best way is to have only
SQLiteOpenHelper for all the app.
You can create a Class in your project that extends SQLiteOpenHelper
. This is helpful when you would be accessing the same Database in multiple Activities
in your application.
When, and where, do I need to get SQLiteDatabase object by calling
dbHelper.getReadableDatabase() (or getWritableDatabase)? I need to do
it on each query, closing it after each query?
This would be done in the Class that extends SQLiteOpenHelper. For example: (this is an excerpt from a Vogella article provided at the end of this post)
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
And in an Activity that will use the Class:
CommentsDataSource datasource = new CommentsDataSource(this);
datasource.open();
And a Cursor
and the Database
connection made from the Activity
should be closed when you are done with fetching, modifying, adding, etc with the Database
.
The code above will make sense when you have read the webpage linked later.
I readed that I should never do database operations in the main
thread, so I'm creating an Async task for each database operation I do
in an Activity, this is the best way?
Ideally, yes. I would personally recommend using an Asynctask especially when you would be dealing with large record sets.
Finally, I would suggest that you read up on this tutorial by Lars Vogella: http://www.vogella.com/articles/AndroidSQLite/article.html. It will address most of your concerns and queries. Good luck. :-)