Ich habe eine Antwort auf diese Frage ziemlich lange gesucht, aber noch nicht gefunden. Ich mache Projekt mit SQLiteDatabase. Alles funktioniert gut, außer dass ich SQLiteOpenHelper meinem CustomAdapter zuweise. Ich bin ungefähr zwei Monate im Android Studio und all dem Java-Ding, also suche ich fast alles im Internet. Hier sind Fragmente meines Projekts.Wie Sie SQLiteOpenHelper in benutzerdefinierten Adapter zuweisen?
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");
}
}
kleiner Teil 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);
}
}
Und hier ist meine Gewohnheit 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;
}
}
Also, ich würde wirklich gerne wissen, wie (wenn möglich) SQLiteOpenHelper in der kundenspezifischen Adapter zuweisen. Jede Hilfe ist erwünscht.
Also, das ist meine bearbeitete Version. Alles ist in Ordnung mit statischer Klasse duomenys, aber es gibt einige Unterstreichungen in diesem Teil:
@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();
}
Ich habe das JavaScript-Tag für Ihre Frage mit dem Java-Tag ausgetauscht. Sie sind zwei sehr verschiedene Sprachen. Nur damit du es weißt :) –
oh mein Gott! Ich fühle usles jetzt sowieso, danke –
übrigens, Sie sind Typ, der Java, nicht javaScript, recht kennt? –