简体   繁体   中英

How to assign SQLiteOpenHelper in Custom Adapter?

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)

So, with help of @AgiMaulana i solved the problem. Code changed only in CustomAdapter, so here it is:

 @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(getContext()); pavadinimas.plus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pavadinimas.db.modifyNumber(name, newNumber); } }); v.setTag(pavadinimas); }else { pavadinimas = (Duomenys) v.getTag(); } 

Thank you guys very much!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM