#android #database #sqlite
#Android #База данных #sqlite
Вопрос:
У меня есть мой DatabaseHelper
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "name";
private static final int DATABASE_VERSION = 1;
private static DatabaseHelper dbHelper;
private Context mTempCtx = null;
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mTempCtx = context;
}
public static DatabaseHelper getInstance(Context context) {
if (null == dbHelper) {
dbHelper = new DatabaseHelper(context);
}
return dbHelper;
}
...
Моя основная деятельность с вкладками
import android.support.v7.app.ActionBarActivity;
public class MainActivity extends ActionBarActivity {
// private AdView mAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DatabaseHelper.getInstance(getApplicationContext())
.getWritableDatabase();
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
...
и фрагмент на первой вкладке
import android.support.v4.app.Fragment;
public class CalendarFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
Cursor cur = getActivity().getContentResolver().query(
TABLE.CONTENT_URI, TABLE.PROJECTION, null, null, null);
Этот запрос делает мой
06-18 08:21:05.854: E/AndroidRuntime(1023): Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: ...
Этот код работает на 4.2.2 и 4.3, 4.4, но я получаю сбой на 4.1 и 2.3.7. На данный момент, после прочтения нескольких руководств и вопросов здесь, он все еще не работал для меня.
Комментарии:
1. покажите больше кода, который написан внутри
onCreateView()
!2. Есть только inflater, get ListView object from и setHasOptionsMenu(true); подробнее
Ответ №1:
если вы хотите выполнить какую-либо операцию с базой данных после db.close , вы должны вызвать db.getWritableDatabase() .
Комментарии:
1. Если я добавлю DatabaseHelper.getInstance(getApplicationContext()).getWritableDatabase(); к onCreateView во фрагменте, я все равно получаю ту же ошибку
2. для каждой операции с БД вам необходимо вызвать db.getWritableDatabase() и закрыть (db.close) после завершения процесса.
3. Я знаю, но все равно ничего не происходит. Почему его работа на 4.2.2 и сбой на 4.1?