Я не думаю, что есть проблема с предоставленным вами кодом.
То есть копирование вашего кода и использование следующего в MainActivity: -
public class MainActivity extends AppCompatActivity {
itemDB ItemDBHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ItemDBHlpr = new itemDB(this);
Item myItem = new Item("tjastjtjjta",0.0,1372.0450878788292,1372.0450878788292,"tuarhwrqhh");
ItemDBHlpr.addItem(myItem);
List<Item> myItemList = ItemDBHlpr.getAllItems();
for (Item i: myItemList) {
Log.d("ITEMFROMLIST",
"Item Name is " + i.getName() +
"\n\tInitial Price = " + String.valueOf(i.getPriceInitial()) +
"\n\tCurrent Price = " + String.valueOf(i.getPriceCurrent()) +
"\n\tPrice Change = " + String.valueOf(i.getPriceChange()) +
"]n]tURL = " + i.getUrl()
);
}
}
}
Результаты в следующем (как и ожидалось) в журнале: -
04-20 07:21:16.291 10005-10005/? D/ITEMFROMLIST: Item Name is tjastjtjjta
Initial Price = 0.0
Current Price = 1372.0450878788292
Price Change = 1372.0450878788292]n]tURL = tuarhwrqhh
Вероятная проблема
Таким образом, наиболее вероятно, что приложение было запущено, а затем были внесены изменения, которые добавили ProductName к определению таблицы, НО база данных не была удалена (что достигается либо удалением приложения, либо удаляя данные приложения или в вашем случае увеличивая версию базы данных (удаляет таблицу и воссоздает таблицу)).
Причина удаления базы данных заключается в том, что метод onCreate автоматически запускается только при создании базы данных.
Увеличение номера версии базы данных приводит к вызову метода onUpgrade . Это удаляет, а затем воссоздает таблицу.
Другая причина
Если на устройстве, используемом для разработки, имеется работающий / включенный диспетчер резервного копирования и манифест приложения имеет android:allowBackup="true"
, то существует вероятность того, что данные приложения могут быть восстановлены, что эффективно исключает удаление приложения или очистку данных приложения. Изменение манифеста для использования android:allowBackup="false"
может решить такие проблемы.
В этом случае увеличение версии базы данных также будет работать, поскольку она не зависит от удаляемой базы данных. Скорее он работает как метод onUpgrade , таблица DROP и вызов метода onCreate .
- Обратите внимание, что это зависит от того, как onUpgrade кодируется соответствующим образом (в этом вопросе это так).
Дополнительный
Я бы также предложил несколько изменений в методе getAllItems (комментарии поясняют), чтобы они выглядели примерно так: -
/** This method returns all the items found on the table of the database,
* recurses the table and returns a list of items
* */
public List<Item> getAllItems() {
List<Item> items = new ArrayList<>();
//String selectQuery = "SELECT * FROM " + TABLE_NAME; //<<<<<<<<<< COMMENTED OUT not needed as query method builds the SQL
SQLiteDatabase db = this.getReadableDatabase();
//Cursor cursor = db.rawQuery(selectQuery, null);
// Generally recommended to use the query Convenience method rate than rawQuery
Cursor cursor = db.query(TABLE_NAME,null,null,null,null,null,null);
// No Need to do multiple checks for the same i.e. moveTo will return false if the move cannot be made
// if no rows then moveToNext returns false so loop ended
// if at last row then moveToNext will return false thus loop ended
while (cursor.moveToNext()) {
// Rather than hard coding offsets (which could change over time)
// better to get the offset according to the column name
String itemName = cursor.getString(cursor.getColumnIndex(COL_PRODUCTNAME));
double initialP = cursor.getDouble( cursor.getColumnIndex(COL_INITIALPRICE));
double currentP = cursor.getDouble(cursor.getColumnIndex(COL_CURRENTPRICE));
double priceC = cursor.getDouble(cursor.getColumnIndex(COL_PRICECHANGE));
String itemUrl = cursor.getString(cursor.getColumnIndex(COL_ITEMWEBPAGE));
//Item holder = new Item(itemName, initialP, currentP, priceC, itemUrl); // No need for intermediate Item
items.add(new Item(itemName, initialP, currentP, priceC, itemUrl)); //<<<<<<<<<< CHANGED
}
return items;
}