【发布时间】:2023-03-05 01:13:01
【问题描述】:
IBM MobileFirst 版本:6.3 移动操作系统:Android 4.4.4
我有一个用例,我们需要将单个或多个 base64 编码的图像字符串存储在集合内的单个文档中。 (由于用例的性质,无法将图像拆分为集合内的多个文档)
将最多 7 个 base64 编码的图像字符串存储到同一个文档中可以按预期工作。 (将包含 7 个 base64 字符串图像的文档添加到 JSONStore)。 当具有 8 个 base64 编码字符串图像的文档已添加到集合内的同一文档中时。文档已成功添加到集合中。但是当在集合上调用 findAll() 时(它只包含 1 个包含 8 个 base64 编码图像的文档;在这种用例中,需要 findAll() ,因为在数据时不存在填充搜索字段的数据从集合中获取);出现以下错误:
Java:
E/JSONSTORE(24451): JSONStoreLogger.logError in JSONStoreLogger.java:189 :: Error when attempting to find a document. An error occurred when reading from the database.
E/JSONSTORE(24451): com.worklight.jsonstore.exceptions.JSONStoreFindException: Error when attempting to find a document. An error occurred when reading from the database.
E/JSONSTORE(24451): at com.worklight.jsonstore.api.JSONStoreCollection.findDocuments(JSONStoreCollection.java:896)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.FindActionDispatcher.databaseActionDispatch(FindActionDispatcher.java:117)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.BaseDatabaseActionDispatcher.actionDispatch(BaseDatabaseActionDispatcher.java:36)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.BaseActionDispatcher.dispatch(BaseActionDispatcher.java:90)
E/JSONSTORE(24451): at com.worklight.androidgap.plugin.DispatchingPlugin$ActionDispatcherRunnable.run(DispatchingPlugin.java:79)
E/JSONSTORE(24451): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/JSONSTORE(24451): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/JSONSTORE(24451): at java.lang.Thread.run(Thread.java:841)
E/JSONSTORE(24451): Caused by: java.lang.IllegalStateException: get field slot from row 0 col 0 failed
E/JSONSTORE(24451): at net.sqlcipher.CursorWindow.getLong_native(Native Method)
E/JSONSTORE(24451): at net.sqlcipher.CursorWindow.getLong(CursorWindow.java:381)
E/JSONSTORE(24451): at net.sqlcipher.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:110)
E/JSONSTORE(24451): at net.sqlcipher.AbstractCursor.moveToPosition(AbstractCursor.java:195)
E/JSONSTORE(24451): at net.sqlcipher.AbstractCursor.moveToNext(AbstractCursor.java:257)
E/JSONSTORE(24451): at android.database.CursorWrapper.moveToNext(CursorWrapper.java:166)
E/JSONSTORE(24451): at com.worklight.jsonstore.api.JSONStoreCollection.findDocuments(JSONStoreCollection.java:877)
E/JSONSTORE(24451): ... 7 more
E/JSONSTORE(24451): JSONStoreLogger.logError in JSONStoreLogger.java:189 :: error while executing find query on database "tempCollection"com.worklight.jsonstore.exceptions.JSONStoreFindException: Error when attempting to find a document. An error occurred when reading from the database.
E/JSONSTORE(24451): com.worklight.jsonstore.exceptions.JSONStoreFindException: Error when attempting to find a document. An error occurred when reading from the database.
E/JSONSTORE(24451): at com.worklight.jsonstore.api.JSONStoreCollection.findDocuments(JSONStoreCollection.java:896)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.FindActionDispatcher.databaseActionDispatch(FindActionDispatcher.java:117)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.BaseDatabaseActionDispatcher.actionDispatch(BaseDatabaseActionDispatcher.java:36)
E/JSONSTORE(24451): at com.worklight.androidgap.jsonstore.dispatchers.BaseActionDispatcher.dispatch(BaseActionDispatcher.java:90)
E/JSONSTORE(24451): at com.worklight.androidgap.plugin.DispatchingPlugin$ActionDispatcherRunnable.run(DispatchingPlugin.java:79)
E/JSONSTORE(24451): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/JSONSTORE(24451): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/JSONSTORE(24451): at java.lang.Thread.run(Thread.java:841)
E/JSONSTORE(24451): Caused by: java.lang.IllegalStateException: get field slot from row 0 col 0 failed
E/JSONSTORE(24451): at net.sqlcipher.CursorWindow.getLong_native(Native Method)
E/JSONSTORE(24451): at net.sqlcipher.CursorWindow.getLong(CursorWindow.java:381)
E/JSONSTORE(24451): at net.sqlcipher.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:110)
E/JSONSTORE(24451): at net.sqlcipher.AbstractCursor.moveToPosition(AbstractCursor.java:195)
E/JSONSTORE(24451): at net.sqlcipher.AbstractCursor.moveToNext(AbstractCursor.java:257)
E/JSONSTORE(24451): at android.database.CursorWrapper.moveToNext(CursorWrapper.java:166)
E/JSONSTORE(24451): at com.worklight.jsonstore.api.JSONStoreCollection.findDocuments(JSONStoreCollection.java:877)
E/JSONSTORE(24451): ... 7 more
E/wl.jsonstore(24451): {"src":"find","err":22,"msg":"INVALID_SEARCH_FIELD","col":"tempCollection","usr":"testUser","doc":{},"res":{}}
Javascript:
{"src":"findAll","err":22,"msg":"INVALID_SEARCH_FIELD","col":"tempCollection","usr":"testUser","doc":{},"res":{}}
是我做错了什么,还是我误用了什么?
编辑:
初始化:
var storeDetails = {
collections: {
tempCollection: {}
},
options: {
username: 'ausername',
password: 'apassword',
localKeyGen: true //Optional local key generation flag, default false.
}
};
WL.JSONStore.init(storeDetails.collections, storeDetails.options);
全部查找:
var options = {
limit: 1
};
WL.JSONStore.get('tempCollection').findAll(options);
Base64 编码的图像字符串: 我正在使用 Cordova 相机 API(包含在 Worklight/MF 中)。 代码的sn-p: 通过使用 Camera.DestinationType.DATA_URL,图像以 base64 编码的字符串形式返回。
var options = {
quality: 100,
destinationType: Camera.DestinationType.DATA_URL,
sourceType: Camera.PictureSourceType.CAMERA,
allowEdit: true,
encodingType: Camera.EncodingType.PNG,
targetWidth: 500,
targetHeight: 500,
popoverOptions: CameraPopoverOptions,
saveToPhotoAlbum: true,
cameraDirection: Camera.Direction.BACK
};
navigator.camera.getPicture(function (imageData) {
var doc = {
src: imageData;
};
WL.JSONStore.get('tempCollection').add(doc);
}, function (err) {
}, options);
【问题讨论】:
-
用 init 和 findAll 更新。
-
你能否包含完整的 JSON Store 实现,其中包含所有内容。
-
作为我客户的敏感代码,我不能只是复制/粘贴它。我将尝试添加具体信息,您到底在寻找什么?
-
可能是您将图像转换为 base64 并插入 JSON 存储的方式
-
提供了更多代码。
标签: android ibm-mobilefirst jsonstore