O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Enviar uma solicitação simples

Em um nível alto, use o Volley criando uma RequestQueue e transmitindo a ela objetos Request. A RequestQueue gerencia linhas de execução do worker para executar as operações de rede, ler e gravar no cache e analisar respostas. As solicitações analisam respostas brutas, e o Volley envia a resposta analisada de volta à linha de execução principal para entrega.

Esta lição descreve como enviar uma solicitação usando o método de conveniência Volley.newRequestQueue, que configura RequestQueue para você. Consulte a próxima lição, Como configurar uma RequestQueue, para informações sobre como configurar uma RequestQueue.

Esta lição também descreve como adicionar uma solicitação a uma RequestQueue e cancelar uma solicitação.

Adicionar a permissão INTERNET

Para usar o Volley, adicione a permissão android.permission.INTERNET ao manifesto do app. Sem isso, o app não poderá se conectar à rede.

Usar newRequestQueue

O Volley fornece um método de conveniência Volley.newRequestQueue que configura uma RequestQueue para você, usando valores padrão, e inicia a fila. Por exemplo:

Kotlin

    val textView = findViewById<TextView>(R.id.text)
    // ...

    // Instantiate the RequestQueue.
    val queue = Volley.newRequestQueue(this)
    val url = "http://www.google.com"

    // Request a string response from the provided URL.
    val stringRequest = StringRequest(Request.Method.GET, url,
            Response.Listener<String> { response ->
                // Display the first 500 characters of the response string.
                textView.text = "Response is: ${response.substring(0, 500)}"
            },
            Response.ErrorListener { textView.text = "That didn't work!" })

    // Add the request to the RequestQueue.
    queue.add(stringRequest)
    

Java

    final TextView textView = (TextView) findViewById(R.id.text);
    // ...

    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(this);
    String url ="http://www.google.com";

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            // Display the first 500 characters of the response string.
            textView.setText("Response is: "+ response.substring(0,500));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            textView.setText("That didn't work!");
        }
    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);
    

O Volley sempre entrega respostas analisadas na linha de execução principal. O uso da linha de execução principal é conveniente para preencher os controles da IU com os dados recebidos, porque você pode modificar esses controles como quiser, diretamente no gerenciador de respostas. No entanto, essa opção é especialmente fundamental para muitas das semânticas importantes oferecidas pela biblioteca, principalmente com relação ao cancelamento de solicitações.

Consulte Como configurar uma RequestQueue para ver uma descrição de como configurar uma RequestQueue por conta própria, em vez de usar o método de conveniência Volley.newRequestQueue.

Enviar uma solicitação

Para enviar uma solicitação, basta construir uma e adicioná-la a RequestQueue com add(), como mostrado acima. Depois de adicionar a solicitação, ela percorre o pipeline, é atendida e tem a resposta bruta analisada e entregue.

Quando você chama add(), o Volley executa uma linha de execução de processamento de cache e um pool de linhas de execução de envio de rede. Quando você adiciona uma solicitação à fila, ela é capturada pela linha de execução do cache e passa por uma triagem: se a solicitação puder ser atendida no cache, a resposta será analisada na linha de execução correspondente, e a resposta analisada será entregue na linha de execução principal. Se a solicitação não puder ser atendida no cache, ela será colocada na fila da rede. A primeira linha de execução de rede disponível recebe a solicitação da fila, realiza a transação HTTP, analisa a resposta na linha de execução do worker, grava a resposta no cache e publica a resposta analisada de volta na linha de execução principal para entrega.

Observe que operações caras, como bloqueio de E/S e análise/decodificação, são feitas nas linhas de execução do worker. Você pode adicionar uma solicitação a partir de qualquer linha de execução, mas as respostas sempre são entregues na principal.

A Figura 1 ilustra a vida útil de uma solicitação:

barras do sistema

Figura 1. Vida útil de uma solicitação.

Cancelar uma solicitação

Para cancelar uma solicitação, chame cancel() no objeto Request. Depois do cancelamento, o Volley garante que o gerenciador de respostas nunca seja chamado. Na prática, isso significa que você pode cancelar todas as solicitações pendentes no método onStop() da sua atividade e que não é necessário sobrecarregar os gerenciadores de respostas com verificações de getActivity() == null, independentemente de onSaveInstanceState() ou outro clichê defensivo já ter sido chamado.

Para usar esse comportamento, normalmente é preciso rastrear todas as solicitações em andamento para poder realizar o cancelamento na hora apropriada. Existe uma maneira mais fácil: você pode associar um objeto de tag a cada solicitação. Em seguida, você pode usar essa tag para disponibilizar um escopo de solicitações de cancelamento. Por exemplo, você pode marcar todas as suas solicitações com a Activity em nome da qual elas estão sendo feitas e chamar requestQueue.cancelAll(this) de onStop(). Da mesma forma, você pode marcar todas as solicitações de imagem em miniatura em uma guia do ViewPager com as respectivas guias e cancelar com o gesto de deslizar, garantindo que a nova guia não seja retida por solicitações de outra.

Este é um exemplo que usa um valor de string para a tag:

  1. Defina sua tag e adicione-a às solicitações.

    Kotlin

        val TAG = "MyTag"
        val stringRequest: StringRequest // Assume this exists.
        val requestQueue: RequestQueue? // Assume this exists.
    
        // Set the tag on the request.
        stringRequest.tag = TAG
    
        // Add the request to the RequestQueue.
        requestQueue?.add(stringRequest)
        

    Java

        public static final String TAG = "MyTag";
        StringRequest stringRequest; // Assume this exists.
        RequestQueue requestQueue;  // Assume this exists.
    
        // Set the tag on the request.
        stringRequest.setTag(TAG);
    
        // Add the request to the RequestQueue.
        requestQueue.add(stringRequest);
        
  2. No método onStop() da sua atividade, cancele todas as solicitações que têm essa tag.

    Kotlin

        protected fun onStop() {
            super.onStop()
            requestQueue?.cancelAll(TAG)
        }
        

    Java

        @Override
        protected void onStop () {
            super.onStop();
            if (requestQueue != null) {
                requestQueue.cancelAll(TAG);
            }
        }
        

    Cuidado ao cancelar solicitações. Se você depende do gerenciador de respostas para avançar um estado ou iniciar outro processo, é preciso levar isso em consideração. Novamente, o gerenciador de respostas não será chamado.