Вот мой класс SQLiteHeler.java.android.database.sqlite.DatabaseObjectNotClosedException: приложение не закрыло объект курсора или базы данных, который был открыт здесь
//tables name in database
public static final String TABLE_NAME="Favtable";
//common column for all table
public static final String KEY_ID="id";
//column in alumnitable
public static final String KEY_CID="Courseid";
public static final String KEY_FavStatus="Status";
public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
//create tables
@Override
public void onCreate(SQLiteDatabase database){
String CREATE_NAME="CREATE TABLE IF NOT EXISTS "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY,"+KEY_CID+" VARCHAR, "+KEY_FavStatus+" VARCHAR)";
database.execSQL(CREATE_NAME);
database.close();
}
public void InsertData(int Courseid,int flag)
{
Cursor cursor = null;
SQLiteDatabase database = this.getReadableDatabase();
cursor.moveToFirst();
SQLiteQuery = "INSERT INTO FavTable (Courseid,Status) VALUES('" + Courseid + "', '" + flag + "');";
database.execSQL(SQLiteQuery);
database.close();
}
public void close() {
if (database != null) {
database.close();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
database.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(database);
}
}
Что я делаю неправильно? Это дает ошибку как
_android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here_
И я назвал создавать и вставлять методы SQLiteHelper в моем классе Фрагмент путем создания объекта.
Это мой CourseFragment.java.here я звоню OnCreate и Вставить метод
alertDialogBuilder.setPositiveButton ("Да", новый DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
flag = 1;
/*s1="true";*/
Courseid = mCourse.getCourseid();
mCourse.setIsFavCourse(!mCourse.getIsFavCourse());
mCourse.save();
// Update listview
mCourses.get(position).setIsFavCourse(
mCourse.getIsFavCourse());
courseListAdapter.notifyDataSetChanged();
//Add courseid and status to database
favourite.onCreate(database);
favourite.InsertData(Courseid,flag);
// Start sync service for course
Intent i = new Intent(context, MDroidService.class);
i.putExtra("notifications", false);
i.putExtra("siteid",
session.getCurrentSiteId());
i.putExtra("courseid",
mCourse.getCourseid());
context.startService(i);
}
});
Проверить это http://stackoverflow.com/questions/4734886/how-can-one-avoid-databaseobjectnotclosedexception – Raghavendra
«Что я делаю неправильно?» Очень много всего. ** 1 ** - Вы вставляете ваши значения ** integer ** как ** строки **. ** 2 ** - Вы создаете ** бесполезный курсор **, который затем перемещается в первую запись (но он не связан с каким-либо набором записей), поскольку он все еще ** null **. ** 3 ** - И вы никогда не закрываете его. –
«Курсор курсор = нуль» и «cursor.moveToFirst» не служат цели, и последнее может вызвать проблемы. Не то, чтобы эти две строки вызывали проблему. если, сказав, что я вызвал create_, вы вызвали 'onCreate', что этот метод автоматически вызывается, поэтому вы не должны называть его напрямую. – MikeT