I have searched an answer to this question quite long, but haven't found yet. I'm doing project with SQLiteDatabase. Everything works fine, except assigning SQLiteOpenHelper to my CustomAdapter. I'm about two months in Android studio and all that Java thing, so I'm just searching almost everything on the internet. Here are fragments of my project.
SQLiteOpenHelper:
public class ActivitiesDataBase extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "database.db";
public static final String ACTIVITIES_COLUMN_ID = "id";
public static final String ACTIVITIES_TABLE_NAME = "create_activity";
public static final String ACTIVITIES_COLUMN_NAME = "activity";
public static final String ACTIVITIES_COLUMN_NUMBER = "number";
public static final String ACTIVITIES_COLUMN_DESCRIPTION = "description";
//Created command to create items
public void addactivity(String activity, String description, String number){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv =new ContentValues();
cv.put(ACTIVITIES_COLUMN_NAME, activity);
cv.put(ACTIVITIES_COLUMN_NUMBER, number);
cv.put(ACTIVITIES_COLUMN_DESCRIPTION, description);
db.insert(ACTIVITIES_TABLE_NAME, null, cv);
db.close();
}
//Constructor
public ActivitiesDataBase(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE create_activity" +
"(id INTEGER PRIMARY KEY, " +
"activity TEXT, " +
"number TEXT, " +
"description TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS create_activity");
}
}
Small part of ActivityMain:
public class MainActivity extends AppCompatActivity implements DrawerLocker {
//Assigning SQLiteOpenHelper, no errors, result is fine.
final ActivitiesDataBase db = new ActivitiesDataBase(this);
private SQLiteDatabase sql;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Here I call command addactivity and it works fine, because I
//assigned SQLiteOpenHelper well.
db.addactivity(activitysubject, activitydesc, activitynum);
}
}
And here is my Custom Adapter:
public class CustomAdapter extends ArrayAdapter {
private List sarasas = new ArrayList();
public CustomAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public void add(Object object) {
super.add(object);
sarasas.add(object);
}
@Override
public int getCount() {
return this.sarasas.size();
}
@Override
public Object getItem(int position) {
return this.sarasas.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final Duomenys pavadinimas;
if (v == null){
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listview_layout, parent, false);
pavadinimas = new Duomenys();
//I have missed some unnecessary text here, hope it doesn't change
//contex a lot
//So, crap starts here. Don't mind that pavadinimas after dots.
//Basically it's written here similarly to MainActivity, but it
//shows errors because assigning is different :(
// (SQLiteOpenHelper assigning is below)
pavadinimas.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pavadinimas.db.addactivity(name, description, number);
}
});
v.setTag(pavadinimas);
}else {
pavadinimas = (Duomenys) v.getTag();
}
DataActivity perdavimas = (DataActivity) this.getItem(position);
pavadinimas.txt1.setText(perdavimas.getNamee());
return v;
}
static class Duomenys{
SQLiteDatabase sql;
//Here i don't know how to assign my SQLiteOpenHelper,
// so actually, I NEED HELP HERE
ActivitiesDataBase db;
}
}
So, I really would like to know, how to assign (if possible) SQLiteOpenHelper in Custom Adapter. Any help is apreciated.
So, this is my edited version. Everything is fine with static class Duomenys, but there is some underlines in that part:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
//Here it underlines mContext and i really don't know from where to get it
final Duomenys pavadinimas = new Duomenys(mContext);
if (v == null){
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listview_layout, parent, false);
//Then it underlines () after Duomenys
pavadinimas = new Duomenys();
pavadinimas.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pavadinimas.db.assactivity(name, description, number);
}
});
v.setTag(pavadinimas);
}else {
//And it underlines pavadinimas, saying
//"Cannot assign a value to final variable 'pavadinimas' "
pavadinimas = (Duomenys) v.getTag();
}
add constructor to Duomenys class
static class Duomenys{
SQLiteDatabase sql;
//Here i don't know how to assign my SQLiteOpenHelper,
// so actually, I NEED HELP HERE
ActivitiesDataBase db;
public Duomenys(Context context){
this.db = new ActivitiesDataBase(context);
}
}
then when creating Duomenys object pass context final Duomenys pavadinimas = new Duomenys(mContext)