Похоже, что ваша проблема может быть связана с отсутствием данных в таблице активность из-за отсутствия (в соответствии с созданием SQL таблицы операций) столбца с именем webPage вместо этого вы, вероятно, захотите вставить данные в столбец homePage .
Это хороший пример того, почему рекомендуется определять имена таблиц и столбцов со статической переменной, а затем ВСЕГДА использовать этопеременная для ссылки на таблицу / столбец.
Короткое исправление для вашего решения может состоять в следующем: -
private static void insertActivity(SQLiteDatabase db, String name, String
description, int type, String webPage, int price, boolean outdoor) {
ContentValues activityValues = new ContentValues();
activitytValues.put("name", name);
activitytValues.put("description", description);
activitytValues.put("type", type);
activityValues.put("homePage", webPage); //<<<<<<<<<< CHANGED
activitytValues.put("price", price);
activityValues.put("outdoor", outdoor);
db.insert("activity", null, activityValues);
}
Однако лучшим решением было бы сделать что-то вроде:-
public class DBHelper extends SQLiteOpenHelper {
private static final String DB_name = "Mydb";
private static final int DB_version = 1;
private static TB_ACTIVITY = "activity"; // DEFINED constant variable for the TABLE NAME
private static ACTIVITY_COL_HOMEPAGE = "homePage"; //<<<<<<<<<< DEFINES constant variable for the COLUMN NAME
.......... other columns done likewise
private String createActivityTypeQuery = "CREATE TABLE activity_type (_id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT)";
private String createpriceQuery = "CREATE TABLE price (_id INTEGER PRIMARY KEY AUTOINCREMENT, price TEXT)";
private String createActivityQuery = "CREATE TABLE " + TB_ACTIVITY + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " //<<<<<<<<<< APPLIED constant variable for the TABLE NAME
+ "name TEXT,"
+ "description TEXT,"
+ "type INTEGER,"
+ ACTIVITY_COL_HOMEPAGE + " TEXT," //<<<<<<<<<< CHANGED TO USE constant
+ "price INTEGER,"
+ "outdoor NUMERIC,"
+ "FOREIGN KEY (type) REFERENCES activity_type(_id),"
+ "FOREIGN KEY (price) REFERENCES price(_id)"
+ ")";
public DBHelper(@Nullable Context context) {
super(context, DB_name, null, DB_version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createActivityTypeQuery);
db.execSQL(createpriceQuery);
db.execSQL(createActivitytQuery);
insertActivityType(db, "Amusement park");
insertActivityType(db, "Waterpark");
insertprice(db, "Low");
insertprice(db, "Medium");
insertprice(db, "High");
insertActivity(db, "Thorpe park", "Amusement park in London, United Kingdom. Carousels and roller coaster plus much more", 1, "www.thorpark.uk", 3, true);
insertActivity(db, "Lee Water Centre", "Lee Water Centre in London, United Kindgom. Lots of water and fun", 2, "www.LeeWaterCentre.uk", 2, true);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
private static void insertActivityType(SQLiteDatabase db, String type) {
ContentValues activityValues = new ContentValues();
aktivitetValues.put("type", type);
db.insert("activity_type", null, activityValues);
}
private static void insertprice(SQLiteDatabase db, String price) {
ContentValues priceValues = new ContentValues();
priceValues.put("price", price);
db.insert("price", null, priceValues);
}
private static void insertActivity(SQLiteDatabase db, String name, String
description, int type, String webPage, int price, boolean outdoor) {
ContentValues activityValues = new ContentValues();
activitytValues.put("name", name);
activitytValues.put("description", description);
activitytValues.put("type", type);
activityValues.put(ACTIVITY_COL_HOMEPAGE, webPage); //<<<<<<<<<<
activitytValues.put("price", price);
activityValues.put("outdoor", outdoor);
db.insert(TB_ACTIVITY, null, activityValues); //<<<<<<<<<<
}
}
- Обратите внимание, что приведенный выше код является принципиальным кодом, он не был проверен и поэтому может иметь некоторые незначительные ошибки.
- Ошибкабыла обнаружена первая ошибка, нет гарантии, что других ошибок не существует.
- См. все строки, отмеченные
//<<<<<<<<<<
- Константа была применена только для homePage столбец, в идеале вы должны сделать то же самое для всех столбцов, если принимаете этот лучший подход.В идеале вы должны сделать константы общедоступными , после чего их можно будет использовать в другом месте, например,
cursor = db.query("activity", new String[] {"_id", "name", "description"}, null, null, null, null, null);
- может стать (при условии, что для констант использовалось соглашение об именовании, приведенное выше)
cursor = db.query(DBHelper.TB_ACTIVITY, new String[] {DBHelper.ACTIVITY_ID,DBHelper.NAME,DBHelper.DESCRIPTION}, null, null, null, null, null);