Он продолжает говоритьAndroid базы данных нулевые фрагменты
getReadableDatabse cant be invoked on null object which is the database.
Так что мой DataBase является недействительным по какой-то причине.
DBHelper:
// Create tables or drop if new version
public dbHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public Athlete getLastInsertedAthlete(){
Log.e("", "TEST!!!!!!!!");
Athlete athlete = new Athlete();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT MAX(" + COL_ATHLETE_ID + ") AS " + COL_ATHLETE_ID + ", " +
COL_FIRST_NAME + ", " + COL_LAST_NAME + ", " + COL_AGE + ", " + COL_GRADE +
" FROM " + TABLE_ATHLETES, null);
cursor.moveToFirst();
int lastAthleteID = cursor.getInt(cursor.getColumnIndex(COL_ATHLETE_ID));
Log.e("", "Athlete ID: " + lastAthleteID);
athlete.setAthleteID(lastAthleteID);
cursor = db.rawQuery("SELECT " + COL_EVENT + " FROM " + TABLE_ATHLETES +
" INNER JOIN " + TABLE_ATHLETES_EVENTS + " ON " + TABLE_ATHLETES + "." + COL_ATHLETE_ID +
" = " + TABLE_ATHLETES_EVENTS + "." + COL_ATHLETE_ID +
" INNER JOIN " + TABLE_EVENTS + " ON " + TABLE_ATHLETES_EVENTS + "." + COL_EVENT_ID +
" = " + TABLE_EVENTS + "." + COL_EVENT_ID +
" WHERE " + TABLE_ATHLETES + "." + COL_ATHLETE_ID + " = ?", new String[] {String.valueOf(athlete.getAthleteID())});
cursor.moveToFirst();
athlete.setFirstName(cursor.getString(cursor.getColumnIndex(COL_FIRST_NAME)));
athlete.setLastName(cursor.getString(cursor.getColumnIndex(COL_LAST_NAME)));
athlete.setAge(cursor.getInt(cursor.getColumnIndex(COL_AGE)));
athlete.setGrade(cursor.getString(cursor.getColumnIndex(COL_GRADE)));
int i = 0;
if (cursor.moveToFirst()) {
do {
String event = cursor.getString(cursor.getColumnIndex(COL_EVENT));
athlete.addEvent(event);
Log.e("", "Events: " + athlete.getEvents().get(i));
i++;
} while (cursor.moveToNext());
}
return athlete;
}
Основная деятельность: посланный из фрагмента а к активности и активности обновления фрагмента B
// Sends athlete information to athlete list
@Override
public void send(String confirmation) {
if(confirmation == "Athlete Added!") {
AthletesList athletesList = getAthleteListFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, athletesList, "athletesList");
athletesList.addAthleteToList();
}else{
Toast.makeText(this, "Error: message confirmation incorrect!", Toast.LENGTH_SHORT).show();
}
}
public AthletesList getAthleteListFragment(){
AthletesList athletesList = (AthletesList) getSupportFragmentManager().findFragmentByTag("athletesList");
if(athletesList == null){
athletesList = new AthletesList();
}
return athletesList;
}
Создание экземпляра базы данных здесь в деятельности созданной. Это фрагмент.
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
db = new dbHelper(getActivity());
}
Возвращает к первому сообщению журнала, но потом говорит, что мой DataBase является null
.
public void addAthleteToList(){
Log.e("", "Getting to addAthleteToList()");
db.getReadableDatabase();
Athlete athlete = db.getLastInsertedAthlete();
db.close();
Log.e("", "Athlete ID to be added: " + athlete.getAthleteID());
пост вы код, чтобы мы могли понять больше –
Добавлен мой основной код активности, который вызывает addAthleteToList функции() на фрагмент –
, что о dbHelper класса –