問題背景
前期App內使用了華為AppGallery Connect的CloudDB服務,用來存儲應用內的數據關系。
最近看CloudDB的Android SDK發(fā)布了新版本,我們就計劃對Android應用的版本同步做了升級,但是升級SDK版本,調測的時候,出現(xiàn)創(chuàng)建對象類型的錯誤。
具體的日志信息如下:
W/NaturalBase: CreateObjectType: has opened naturalStore.
E/AGConnectCloudDB: Failed to create object type into the AGCConnectCloudDB.
W/System.err: com.huawei.agconnect.cloud.database.exceptions.AGConnectCloudDBException: code: 3 message: Close CloudDBzone first.
問題解決
從錯誤信息中可以看到,需要我先關閉CloudDBZone再進行操作。但是不知道原因。 不官怎么說,先找找官方文檔,看看對應錯誤碼是怎么描述的。
看文檔描述,需要我先關閉Zone再進行操作,但是我并沒有執(zhí)行刪除CloudDBZone的操作,應該不涉及關閉CloudDBZone才對啊。
最終還是從日志和文檔分析:
1、從錯誤日志來看,我這是創(chuàng)建對象類型,也就是createObjectType方法的時候報的該錯誤。
2、再結合文檔,CloudDB初始化的流程,應該是:initialize -> createObjectType –> openCloudDBZone2
這樣問題就明確了,我需要在openCloudDBZone2之前,就先完成創(chuàng)建對象類型方法。
修改代碼執(zhí)行的優(yōu)先級順序:initialize -> createObjectType –> openCloudDBZone2,問題圓滿解決。
問題根因
咨詢華為技術支持,得到的該錯誤的根本原因:
操作涉及到了版本的升級,也就是說需要同步升級云側對象類型的schema。
在有打開且未關閉的CloudDBZone的情況下,是無法做schema升級的。
需要先完成對象類型的創(chuàng)建,在執(zhí)行openCloudDBZone的操作。
相關參考鏈接:
1、云數據庫API文檔
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-References/clouddb-agconnectclouddbexception#getCode
2、云數據庫初始化的示例代碼與執(zhí)行步驟:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-get-started#h1-1594008398022