Приложение BlackBerry 10 QML падает при загрузке источника данных

В следующем коде конструктор загружает файл Qml, который загружает данные из удаленного источника данных Json, и это прекрасно работает. Когда я вызываю метод startMenu, я использую тот же самый Qml в MainMenu.Qml, но как только я вызываю dataSource.load (), мое приложение вылетает в QDeclarativeExpression :: hasError (), после чего оно просто зависает. Нет сообщений об ошибках или исключений.

Если я переместить dataSource.load (); до нажатия кнопки это работает, но тогда у меня нет возможности загрузить мои данные при загрузке страницы.

#include "MyAppBB.hpp"
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>
#include <bb/cascades/Button>
#include <bb/data/DataSource>
#include <wifi/wifi_service.h>

using namespace bb::cascades;

MyAppBB::MyAppBB(bb::cascades::Application *app) :
QObject(app) {
// create scene document from main.qml asset
// set parent to created document to ensure it exists for the whole application lifetime
bb::data::DataSource::registerQmlTypes();
QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
this->myApp = app;

QDeclarativePropertyMap* propertyMap = new QDeclarativePropertyMap;
propertyMap->insert("name", QVariant(QString("Wes Barichak")));
propertyMap->insert("phone", QVariant(QString("519-555-0199")));

// create root object for the UI
this->root = qml->createRootObject<AbstractPane>();

qml->setContextProperty("propertyMap", propertyMap);
qml->setContextProperty("root", this);

QObject *newButton = root->findChild<QObject*>("btnLogin");
QObject::connect(newButton, SIGNAL(clicked()), this, SLOT(loginClick()));
// set created root object as a scene
app->setScene(root);
}

void MyAppBB::startMenu() {
QmlDocument *qml2 = QmlDocument::create("asset:///MainMenu.qml").parent(this);
AbstractPane *root2 = qml2->createRootObject<AbstractPane>();

this->myApp->setScene(root2);
}

Вот Qml

import bb.cascades 1.0
import bb.data 1.0

Page {
Container {
layout: StackLayout {
}TextField {
id: txtUsername
}

ListView {
id: myListView

// Associate the list view with the data model that's defined in the
// attachedObjects list
dataModel: dataModel
listItemComponents: [
ListItemComponent {
type: "item"
// Use a standard list item to display the data in the data
// model
StandardListItem {

title: ListItemData.identificationType
description: ListItemData.identificationTypeId
}
}
]
}
attachedObjects: [
GroupDataModel {
id: dataModel

// Sort the data in the data model by the "pubDate" field, in
// descending order, without any automatic grouping
sortingKeys: [
"ID"]
sortedAscending: false
grouping: ItemGrouping.None
},
DataSource {
id: dataSource

source: "http://192.168.150.1/JsonMobileApiService/Service1.svc/GetIDTypes"
type: DataSourceType.Json
onDataLoaded: {
dataModel.clear();
dataModel.insertList(data);
}
}
]
onCreationCompleted: {
txtUsername.setText("boo!");
// Statement below causes crash
dataSource.load();
}
}
}

2

Решение

Есть onCreationCompleted слот в AbstractPane, вы можете использовать это для вызова нагрузки.

Это в спецификации API для XMLDataAccess В качестве примера. Я использую это для загрузки данных из файла XML самостоятельно, это работает

  import bb.cascades 1.0
import bb.data 1.0
Page {
content: ListView {
id: listView
dataModel: dataModel
...
}
attachedObjects: [
GroupDataModel {
id: dataModel
},
DataSource {
id: dataSource
source: "contacts.xml"query: "/contacts/contact"onDataLoaded: {
dataModel.insertList(data);
}
}
]
onCreationCompleted: { dataSource.load(); }
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector