2015-12-03 64 views
1

現在,我正在開發一個涉及從MovieDB中獲取電影數據的項目。我使用Schematic作爲我的內容提供者生成器來避免頭痛。迄今爲止工作良好。防止重新插入數據到數據庫表[Android]

我在這裏問的問題是我的代碼是如何構造的。現在,包含AsyncTask的片段調用任務來獲取數據,每當應用程序加載MainActivity時調用該數據。數據被提取並插入到數據庫表中;遊標不返回null並獲取我存儲的數據。然而,我遇到了這個問題,我認爲這是一個問題,我再次獲取數據並將其存儲到同一個數據庫中。如果我加載到DetailActivity,SettingsActivity或從MainActivity導航離開MainActivity但會通過後退按鈕返回的任何其他活動,則會發生這種情況。

日誌語句似乎顯示我的數據再次重新插入,導致同一數據庫表中相同條目的數量翻倍等等。我可以考慮一些臨時解決方案,其中之一是在啓動應用程序時刪除調用以獲取數據的調用,而不是通過使用操作欄上的刷新按鈕來獲取數據。另一種方法是讓表格中的一列獨一無二,尤其是YouTube視頻密鑰字符串,該密鑰字串包含YouTube視頻的關鍵字。我現在還不確定該做什麼。

任何解決方案,我將不勝感激。謝謝。

+0

難道你沒有[設置你的條目唯一](http://stackoverflow.com/questions/8544231/how-to-set-a-column-as-unique-indexer-on-sqlite)? –

+0

我會嘗試一次,然後在我睡之前醒來。由於我的表格是如何設置的,當它們有多個視頻鏈接時,同一部電影存在多個條目。我將假設Youtube視頻密鑰(URI中的查詢參數後面的#)是唯一的。 – kthieu

+0

沒有,試過了。設置唯一約束會使應用程序崩潰試圖重新插入 – kthieu

回答

0

加上UniquePrimary鍵與replace作爲衝突解決。

像這樣的事情

@DataType(DataType.Type.INTEGER) 
@PrimaryKey(onConflict = ConflictResolutionType.REPLACE) 
String UNIQUE_COLUMN = "unique_column"; 

它與@PrimaryKey@Unique@Check。更多信息可在Schematic's JavaDoc和SQlite的ON CONFLICT文檔中找到。

有一些限制:

  • 原理將忽略onConflict如果多個@PrimaryKey存在
  • 分辨率Replace將取代所有列在一排,不只是列,在插入提供。
相關問題