Tous les processus réseau d'une application sont gérés par les demandes réseau, un échange d'informations entre une adresse réseau et une application. Ces demandes peuvent signaler des échanges entre l'application et un service d'entités pour assurer une connexion continue et des informations à jour, télécharger des réponses de formulaire vers un service d'entités central ou télécharger un paquetage de tuiles ou une géodatabase, par exemple.
Création d'une demande réseau
L'essentiel d'une demande réseau est géré par le composant NetworkRequest. Ce composant contient les configurations, la destination et les paramètres de la demande, ainsi que des fonctions aidant à surveiller le processus de la demande.
L'exemple de code suivant présente le processus de téléchargement d'un fichier à partir d'une source en ligne, en l'occurrence une image. La console affiche le processus du téléchargement, ainsi que l'adresse URL du fichier téléchargé sur le périphérique une fois la demande terminée.
QtObject {
id: internal
property url folderUrl: AppFramework.userHomeFolder.fileUrl("ArcGIS/Runtime/Data");
}
FileFolder { //Creates FileFolder object to handle filepath
id: fileFolder
url: internal.folderUrl
Component.onCompleted: {
if (!fileFolder.exists) {
fileFolder.makeFolder(internal.folderUrl);
}
}
}
//Downloads an image from the web
NetworkRequest {
id: networkRequest
url: "http://appstudio.arcgis.com/images/index/introview.jpg"
responsePath: fileFolder.path +"/appstudio.jpg"
property url imagePath: responsePath
onReadyStateChanged: {
if (readyState === NetworkRequest.DONE) {
console.log(networkRequest.url, networkRequest.responsePath)
image.source = internal.folderUrl+"/appstudio.jpg";
}
}
onProgressChanged: console.log("progress:", progress)
onError: {
console.log(errorText + ", " + errorCode)
//On failure, don't use the local copy
image.source = ""
}
}
ColumnLayout {
spacing: 20
anchors {
left: app.left
top: app.top
margins: 20
}
Button {
id:download
text: "Download Request (Download Image)"
Layout.margins: 2
Layout.fillWidth: true
onClicked: {
networkRequest.send({f:"json"});
}
}
Button {
id: clear
text: "Clear"
Layout.margins: 2
Layout.fillWidth: true
onClicked: {
image.source = ""
}
}
Image {
id: image
Layout.margins: 10
Layout.preferredWidth: 250
Layout.preferredHeight: 200
}
}
La propriété progress, signalée par le signal onProgressChanged, décrit le processus de la demande réseau sous la forme d'une valeur décimale comprise entre 0.0 et 1.0. Cette propriété considère les moitiés d'envoi et de réception de la demande de poids égal, ce qui signifie que cette valeur progressera rarement à un rythme linéaire ; par exemple, le fait d'ajouter cet exemple de code à l'exemple ci-dessus aura pour effet d'afficher une barre de progression pour le téléchargement d'image. Toutefois, cette barre de progression passera rapidement de l'état vide au point de mi-chemin (car la portion d'envoi de la demande est très petite) avant de progresser sur le trajet restant à un rythme lent en comparaison.
ProgressBar {
id: progressBar
visible: true
anchors {
left: parent.left
leftMargin: 10
right: parent.right
rightMargin: 10
}
value: networkRequest.progress
}
En-têtes réseau
L'en-tête d'une demande réseau fournit à l'adresse de destination des informations d'identification sur la source de la demande. Le composant NetworkRequestHeaders gère ceci et peut être utilisé via la propriété headers pour définir des informations alternatives dans ces en-têtes.
Le composant NetworkRequestHeaders comporte deux propriétés permettant d'écrire dans ces espaces. La propriété Referrer décrit l'adresse d'origine de la demande, tandis que la propriété userAgent décrit le logiciel utilisé pour y accéder. Par défaut, ces propriétés retournent des valeurs reflétant l'application mais peuvent être définies autrement. Le code d'exemple suivant envoie une demande de téléchargement se décrivant elle-même comme provenant de la page d'accueil d’ArcGIS Online à l'aide de Mozilla Firefox.
NetworkRequest {
id: uploadRequest
url: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Wildfire/FeatureServer/1/applyEdits"
method: "POST"
headers.referrer: "https://www.arcgis.com/home/index.html"
headers.userAgent: "Mozilla/5.0"
onReadyStateChanged: {
if ( readyState === NetworkRequest.DONE ) {
result.text = responseText
}
}
onError: result.text = errorText + ", " + errorCode
}
ColumnLayout {
spacing: 20
anchors {
left: app.left
top: app.top
margins: 20
}
Button {
id:upload
text: "Upload Request"
Layout.margins: 2
Layout.fillWidth: true
onClicked: {
uploadRequest.send({adds:"[{\"attributes\":{\"description\":\"Networkrequest Sample\",\"symbolid\":\"13\",\"timestamp\":null},\"geometry\":{\"paths\":[[[-11542803.322978519,3129176.1574580222],[-3547788.0343353897,8625749.168400176],[-5746417.238712249,-3366773.7645645197]]],\"spatialReference\":{\"latestWkid\":3857,\"wkid\":102100}}}]", f:"json"});
}
}
TextArea {
id:result
readOnly: true
Layout.fillWidth: true
Layout.margins: 10
Layout.preferredWidth: 250
Layout.preferredHeight: 75
}
}
Vous avez un commentaire à formuler concernant cette rubrique ?