Xamarin Android - Acessando um serviço REST com RestSharp


Neste artigo vou mostrar como acessar um serviço REST no Xamarin Android usando a biblioteca RestSharp no Visual Studio 2015 e a linguagem C#.

Vamos iniciar com resumo sobre REST...

O que é REST ?

Representational State Transfer (REST) ​​é um estilo de arquitetura para a construção de serviços na web. As solicitações REST são feitas em HTTP usando os mesmos verbos HTTP que os navegadores da Web usam para recuperar páginas da Web e enviar dados para os servidores. Os verbos são:

GET - esta operação é usada para recuperar dados do serviço da web.
POST - esta operação é usada para criar um novo item de dados no serviço web.
PUT - esta operação é usada para atualizar um item de dados no serviço da web.
PATCH - esta operação é usada para atualizar um item de dados no serviço da Web, descrevendo um conjunto de instruções sobre como o item deve ser modificado.
DELETE - esta operação é usada para apagar um item de dados no serviço web.

As APIs de serviço da Web que aderem ao REST são chamadas de APIs RESTful e são definidas usando:

1- Uma URI base.
2- Métodos HTTP, como GET, POST, PUT, PATCH ou DELETE.
3- Um tipo de mídia para os dados, como JavaScript Object Notation (JSON).


A simplicidade do REST ajudou a torná-lo o principal método para acessar serviços da Web em aplicativos móveis.

Além do REST podemos usar também os seguintes recursos para gerenciar serviços na web:

Para mostrar como podemos usar os recursos do REST para acessar informações na web vou criar um exemplo bem simples que acessa informações do site : http://www.androidcodec.com usando os recursos da biblioteca RestSharp que você pode consultar neste link: http://restsharp.org/.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no VS Community 2015

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template Android -> Blank App(Android)

Informe o nome um nome adequado ao seu projeto, eu vou usar o nome Droid_RestApi,  e clique no botão OK;

Abra o arquivo Main.axml na pasta Resources/layout no modo Designer e inclua a partir da ToolBox os seguintes controles:

Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minWidth="25px"
    android:minHeight="25px">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:minWidth="25px"
        android:minHeight="25px"
        android:background="@android:color/holo_orange_light">
        <Button
            android:text="Acessar RestApi"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnAcessar" />
        <TextView
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/txtResposta"
            android:textColor="@android:color/black"
            android:background="#d3ffce" />
    </LinearLayout>
</ScrollView>

Vamos agora incluir uma referência a biblioteca RestSharp em nosso projeto.

No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;

Selecione a guia Browse e digite restsharp. Localize a biblioteca e instale-a no projeto:

Agora podemos usar os recursos da RestSharp.

Abra o arquivo MainActivity na raiz do projeto e incluir o código abaixo neste arquivo.

using Android.App;
using Android.Widget;
using Android.OS;
using RestSharp;
namespace Droid_RestApi
{
    [Activity(Label = "RestAPI", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        ProgressDialog dialog;
        TextView txtv1;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            Button button = FindViewById<Button>(Resource.Id.btnAcessar);
            txtv1 = FindViewById<TextView>(Resource.Id.txtResposta);
            button.Click += Button_Click;
        }
        private void Button_Click(object sender, System.EventArgs e)
        {
            dialog = new ProgressDialog(this);
            dialog.SetMessage("Aguarde...");
            dialog.SetProgressStyle(ProgressDialogStyle.Spinner);
            dialog.Show();
            var cliente = new RestClient("http://www.androidcoded.com");
            var request = new RestRequest("/", Method.GET);
            request.AddHeader("Content-type", "application/json");
            cliente.ExecuteAsync(request, response =>
            {
                RunOnUiThread(delegate
                {
                    dialog.Dismiss();
                    var responseFacebook = response.Content;
                    txtv1.Text = responseFacebook.ToString();        
                    Toast.MakeText(this, "reposta", ToastLength.Long);
                });
            });
        }
    }
}

Vamos entender o código :

Usamos um ProgressDialog() para exibir uma caixa diálogo e uma mensagem de texto mostrando um indicador de progresso da operação:

            dialog = new ProgressDialog(this);
            dialog.SetMessage("Aguarde...");
            dialog.SetProgressStyle(ProgressDialogStyle.Spinner);
            dialog.Show();

A seguir criamos uma instância da classe RestClient() passando a url de destino para o construtor da classe para que a comunicação seja estabelecida. Depois criamos uma instância da classe RestRequest() informando o tipo de requisição (GET) e definimos o cabeçalho da requisição como sendo do tipo 'application/json':

            var cliente = new RestClient("http://www.androidcoded.com");
            var request = new RestRequest("/", Method.GET);
            request.AddHeader("Content-type", "application/json");

Concluindo usamos o método ExecuteAsync() onde vamos usar o método runOnUiThread para ter acesso a thread principal do Android e obter e exibir a resposta no TextView:

            cliente.ExecuteAsync(request, response =>
            {
                RunOnUiThread(delegate
                {
                    dialog.Dismiss();
                    var responseSite = response.Content;
                    txtv1.Text = responseSite.ToString();       
                    Toast.MakeText(this, "reposta", ToastLength.Long);

                });
            });

Executando o projeto usando o emulador Genymotion iremos obter o seguinte resultado:

Pegue o projeto aqui :     Droid_RestApi.zip  (sem as referências)

Porque a palavra da cruz é loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a inteligência dos inteligentes.

1 Coríntios 1:18,19

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti