Pedidos de rede

Todos os processos de rede em um aplicativo são tratados por pedidos de rede, uma troca de informações entre um endereço de rede e um aplicativo. Estes pedidos podem sinalizar trocas entre o aplicativo e um serviço de feição para assegurar uma conexão continuada e informações atualizadas, transferindo respostas do formulário para um serviço de feição central, ou baixando um pacote de mosaico ou geodatabase, como exemplos.

Criar um pedido de rede

A maioria dos pedidos de rede são tratados pelo componente NetworkRequest. Este componente contém as configurações, destino, e configurações do pedido, como também diversas funções para ajudar a monitorar o processo do pedido.

A amostra de código seguinte mostra o processo para baixar um arquivo de uma fonte online, neste caso, uma imagem. O console mostra o processo de download, assim como a URL do arquivo baixado no dispositivo quando o pedido for finalizado.

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
    }
}

A propriedade progress , reportada pelo sinal onProgressChanged , descreve o processo do pedido de rede na forma de um valor decimal de 0.0 a 1.0. Esta propriedade considera enviar e receber metades do pedido de peso igual, o qual significa que este valor raramente progredirá em uma taxa linear; por exemplo, adicionar esta amostra de código para uma acima irá exibir uma barra de progresso do download da imagem. Entretanto, esta barra de progresso irá pular rapidamente de vazia para um ponto médio (já que a parte de envio do pedido é muito pequeno) antes de progredir com o restante de modo comparativamente lento.

ProgressBar {
    id: progressBar
    visible: true
    anchors {
        left: parent.left
        leftMargin: 10
        right: parent.right
        rightMargin: 10
    }
    value: networkRequest.progress
}

Cabeçalhos de rede

O cabeçalho de um pedido de rede fornece informações de identificação para o endereço de destino sobre a origem do pedido. O componente NetworkRequestHeaders trata disto e pode ser utilizado pela propriedade headers para definir informações alternativas nestes cabeçalhos.

O NetworkRequestHeaders tem duas propriedades que podem ser utilizadas para gravar nestas áreas. A propriedade Referrer descreve o endereço de origem do pedido, enquanto a propriedade userAgent descreve o software para acessá-la. Por padrão, estas propriedades retornarão valores refletivos do aplicativo mas pode ser definido caso contrário. O código de amostra seguinte envia o pedido de transferência descrevendo si próprio como de origem da página inicial ArcGIS Online utilizando 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
    }
}