How To Use Or Instantiate Sqlite Database Helper Class Instance Inside A Custom Dapter Class In Android?
I am absolute beginner to Android. Now I am creating a tutorial project. In my project I am using ListView with custom adapter. But I created the custom adapter as a different and
Solution 1:
Does not look like a big problem, instantiate it in your constructor:
public TaskListAdapter(Context context,ArrayList<Task> values)
{
super(context,-1,values);
this.dbHelper = new DatabaseHelper(context.getApplicationContext());
this.context = context;
this.values = values;
}
Then use it in your OnClickListener:
ButtondoneBtn= (Button)rowView.findViewById(R.id.task_row_done_btn);
doneBtn.setTag(values.get(position).getId());
doneBtn.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
dbHelper.markAsDone(v.getTag());
}
});
Don't forget to close your Database in DatabaseHelper.markAsDone
Solution 2:
Firstly if you want to use the db inside the adapter , you can use CursorAdapter not ArrayAdapter ,
if you want to stay on arrayAdapter , then you can pass th db Object in the construcor
Solution 3:
You should make the DatabaseHelper
class as thread-safe Singleton
and then get that instance from the adapter.
publicclassDatabaseHelperextendsSQLiteOpenHelper{
privatestatic DatabaseHelper dbHelper;
publicstatic DatabaseHelper getInstance() {
if(dbHelper == null)
{
synchronized (DatabaseHelper.class)
{
if(dbHelper == null)
{
dbHelper = newDatabaseHelper(MyApplicationInstance.getAppContext());
}
}
}
return dbHelper;
}
privateDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
And then in the CustomAdapter
just execute your commands as DatabaseHelper.getInstance().insert()
Hope this helps.
Post a Comment for "How To Use Or Instantiate Sqlite Database Helper Class Instance Inside A Custom Dapter Class In Android?"