2016-01-14 57 views
-1

我已經構建了一個android應用程序,我從主要活動的onCreate()方法調用方法insertSampleData()在Android中將示例數據的代碼放在哪裏?

問題是,onCreate()方法被稱爲每次啓動應用程序, 這導致填充我的數據庫大量的示例數據。

我想在安裝應用程序時僅提供一次示例數據。任何人都可以請告訴我該怎麼做?非常感謝 !

P.S:方法insertSampleData()用於將樣本數據插入Sq-lite數據庫。

+1

下面所有的答案#完美 –

回答

2

雖然其他答案是正確的,但有一個內置的方法來實現你想要的:onCreateonUpgrade方法SqliteOpenHelper

  1. 關於的onCreate()和onUpgrade()每當應用程序是新安裝的

的onCreate(..)被調用。 每當應用程序升級並啓動並且數據庫版本不相同時,都會調用onUpgrade。

至於這裏寫的:https://stackoverflow.com/a/8133640/5349594

我想補充一點,如果你使用的是一些ORM庫,他們大多支持類似這樣的東西。

2

在您的insertSampleData()方法中,之前插入數據,請檢查yout表中的行數。
如果是,請執行INSERT s。
else需要聲明:繼續退出。

注意:如果未找到,則樣本數據將在下次運行時重新插入。
因爲在onCreate()中調用insertSampleData()
而且它插入示例數據,如果沒有找到數據。
因此,表格在開始時不會是空的。

+1

似乎完美的邏輯。 #先生 –

+1

謝謝,先生。這確保了在第一次運行後用戶以某種方式刪除數據時重新插入數據。 –

+0

,但如果用戶可以刪除數據,則可能會導致問題 –

6

2周的方式這樣做的:

  • 無論是保存,如果數據被插入一次(例如在SharedPreferences)
  • 或者檢查是否有樣本數據已經在數據庫中添加它之前(但可能導致的問題,如果用戶可以刪除數據)
4

你可以在你的Application類中創建了檢查,在其onCreate()類似於此:

SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE); 
boolean firstRun = preferences.getBoolean("firstRun", false); 
if(firstRun) { 
    insertSampleData(); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putBoolean("firstRun", true); 
    editor.commit(); 
} 
1

正如Hrundi在評論中所說,您可以使用if聲明,但可能更好的選擇是使用定製DatabaseHelper類wihic延伸SQLiteOpenHelper

Inside SQLiteOpenHelper您有onCreate這是第一次創建數據庫時調用的方法。這是創建表格和表格的初始人口應該發生的地方。

你可以谷歌這個,你會發現很多的例子。