يتم معالجة كل عمليات الشبكة في التطبيق بواسطة طلبات الشبكة، وهي تبادل للمعلومات بين عنوان شبكة وتطبيق. ويمكن تبادل هذه الطلبات بالإشارة بين التطبيق وخدمة المعلم لضمان اتصال مستمر ومعلومات حديثة أو تحميل استجابات النموذج إلى خدمة معالم مركزية أو تنزيل حزمة تجانب أو قاعدة بيانات جغرافية للتجانب، كأمثلة.
إنشاء طلب شبكة
يتم معالجة معظم طلب الشبكة بواسطة مكون NetworkRequest. يحتوي هذا المكون على عمليات تكوين ووجهة وإعدادات الطلب، وكذلك عدد الوظائف اللازمة للمساعدة في مراقبة عملية الطلب.
توضح عينة الكود التالية عملية تنزيل ملف من مصدر متصل بالإنترنت، وهو صورة في هذه الحالة. تعرض وحدة التحكم عملية التنزيل، ووكذلك عنوان URL للملف الذي تم تنزيله على الجهاز عندما اكتمال الطلب.
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
}
}
توضح خاصية progress التي تم الإبلاغ عنها بإشارة onProgressChanged عملية طلب الشبكة في نموذج قيمة عشرية من 0.0 إلى 1.0. تأخذ هذه الخاصية وحدات إرسال وتلقي طلب الوزن المتساوي، وهو ما يعني أن هذه القيمة نادرًا ما تتقدم عند معدل خطي، على سبيل المثال، ستعمل إضافة عينة الكود إلى الطلب أعلاه شريط التقدم الخاص بتنزيل الصورة. ومع ذلك، سيقفز شريط التقدم سريعًا من النقطة الحالية إلى نقطة منتصف الشريط (وذلك لأن جزء الإرسال في الطلب صغير للغاية) قبل معالجة المتبقي من الطريق بشكل بطيء نسبيًا.
ProgressBar {
id: progressBar
visible: true
anchors {
left: parent.left
leftMargin: 10
right: parent.right
rightMargin: 10
}
value: networkRequest.progress
}
عناوين الشبكة
يوفر عنوان طلب الشبكة معلومات محددة لعنوان الوجهة الخاصة بمصدر الطلب. يعالج مكون NetworkRequestHeaders ذلك، ويمكن استخدامه من خلال خاصية headers لتعريف معلومات بديلة في هذه العناوين.
يوجد لدى NetworkRequestHeaders خاصيتين يمكن استخدامهما للكتابة في هذه المناطق. تصف خاصية Referrer عنوان مصدر الطلب، في حين أن خاصية userAgent تصف البرنامج المستخدم للوصول إليه. وافتراضيًا، ستقوم هذه الخصائص بإرجاع القيم الانعكاسية للتطبيق، ولكن يمكن تعريفها بشكل آخر. يُرسل كود العينة التالية طلب تحميل يصف نفسه على أنه قادم من صفحة ArcGIS Online الرئيسية باستخدام 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
}
}