IBM MobileFirst версия: 6.3 Mobile OS: Android 4.4.4MobileFirst Платформа JSONStore Произошла ошибка при чтении из базы данных
У меня есть потребительной случай, когда мы должны хранить один или несколько base64-закодированные изображения строка (ы) в одном документе внутри коллекции. (Из-за характера прецедента невозможно разбить изображения на несколько документов внутри коллекции)
Сохранение до 7 строк в кодировке с кодировкой base64 в одном документе работает по назначению. (В JSONStore добавлен документ с 7 строковыми изображениями base64). Когда документ, содержащий 8 строковых изображений с кодировкой base64, был добавлен в тот же документ внутри коллекции. Документ успешно добавлен в коллекцию. Но когда findAll() вызывается в коллекции (он содержит только один документ с 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":{}}
Есть ли что-то я делаю не так, или что-то я злоупотребляю?
РЕДАКТИРОВАТЬ:
INIT:
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);
FindAll:
var options = {
limit: 1
};
WL.JSONStore.get('tempCollection').findAll(options);
Base64-закодированной строки изображения: Я с помощью камеры API Кордова (в комплекте с Worklight/MF). Фрагмент кода: Используя 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. – laurigu
Можно ли включить полную реализацию JSON Store, которая включает в себя все. – dhineshsundar
Видя как этот чувствительный код для моего клиента, я не могу просто скопировать его/вставить. Я попытаюсь добавить конкретную информацию, что именно вы ищете? – laurigu