2017-10-19 189 views
0

我遇到了正在Play商店發佈的應用程序的問題後工作:Android應用程序更新只刪除所有本地數據

一個新的更新發布後,一些用戶不能正常使用的應用程序,直到他們刪除應用程序並從頭開始重新安裝。我無法重現此問題,並且我沒有任何錯誤日誌。

該應用程序具有內部SQLite數據庫,每次發佈新更新時都會擦除該數據庫。它還通過okhttp庫實現了一個REST客戶端。

我覺得我錯過了更新過程中的某些東西,但我不知道其他任何可能出錯的東西。似乎可能會有數據庫問題,但它會完全消失。另外REST客戶端可能是個問題,但我無法想象這實際上是一個問題。沒有其他圖書館似乎與這個問題有關。

我期待着任何建議,謝謝你,

合資

編輯:一個用於SQLite的處理

public RfidTagDbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

public void onCreate(SQLiteDatabase db) { 
    db.execSQL(SQL_CREATE_ENTRIES); 
} 

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL(SQL_DELETE_ENTRIES); 
} 

public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    onUpgrade(db, oldVersion, newVersion); 
} 

SQL_DELETE_ENTRIES代碼段包含了一段SQL代碼刪除所有表(如果存在),CREATE_ENTRIES執行相反的操作

+0

您使用的是Java嗎?有一個叫SQlite Helper的類。你可以使用它? – Xenolion

+0

是的,我正在使用Java和您提到的庫。我認爲這可能是更新我的應用程序時更常見的工作流程問題,但它也可能是軟件問題,這就是爲什麼我提供了有關我使用的庫的一些信息 – Jan

+0

編輯添加類的內容?我們可以看到它是如何工作的 – Xenolion

回答

0

您的onUpgrade()必須使數據庫保持適合的狀態newVersion。不要只是刪除表格,而是重新創建它。對於一個破壞性的升級過程中,如您就可以通過調用onUpgrade()onCreate()實現它:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL(SQL_DELETE_ENTRIES); 
    onCreate(db); 
} 
0

你應該升級數據庫版本的類可以說,從12。在您的SQliteHelper類中。然後刪除條目和創建條目,如:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL(SQL_DELETE_ENTRIES); 
    db.execSQL(SQL_CREATE_ENTRIES); 
}