1
resposta

REST - JASON

Ola, estou tentando aprender a utilizar uma chamada REST com JASON. Tenho uma url que vou importar os valores para popular objetos de um ArrayList e depois mostrar na tela os objetos numa lista.

Classe Grupo

    public class Group {

        private int id;
        private String name;
        private String description;
        private String descriptionShort;
        private String defaultImageUrl;
        private long date;


        public Group(){

        }

        public Group(int id, String name, String description, String descriptionShort, String defaultImageUrl, long date) {
            this.id = id;
            this.name = name;
            this.description = description;
            this.descriptionShort = descriptionShort;
            this.defaultImageUrl = defaultImageUrl;
            this.date = date;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getDescriptionShort() {
            return descriptionShort;
        }

        public void setDescriptionShort(String descriptionShort) {
            this.descriptionShort = descriptionShort;
        }

        public String getDefaultImageUrl() {
            return defaultImageUrl;
        }

        public void setDefaultImageUrl(String defaultImageUrl) {
            this.defaultImageUrl = defaultImageUrl;
        }

        public long getDate() {
            return date;
        }

        public void setDate(long date) {
            this.date = date;
        }

        @Override
        public String toString() {
            return super.toString();
        }
    }

A Classe principal

public class InterestGroupsListActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_interest_groups_list);

        GroupDAO dao = new GroupDAO(this);
        List<Group> groups = dao.getGroups(); //Nao sei se o grupo seria passado dessa maneira pelo dao

        ListView listGroups = (ListView) findViewById(R.id.list_groups);
        ArrayAdapter<Group> adapter = new ArrayAdapter<Group>(this,  android.R.layout.simple_list_item_1, groups);
        listGroups.setAdapter(adapter);

    }

}

Aqui comeca minha duvida, onde colocar e como chamar a url via comando REST e JASON.

public class GroupDAO  {

    //imagino que seria aqui a implementacao do REST
    public List<Group> getGroups() {

    }
}

Qualquer ajuda ou mesmo se tem algum tutorial aqui na Alura já me ajudaria bastante.

1 resposta

Você pode fazer o código mais braçal usando a classe HttpURLConnection ou usar uma das libs mais famosas do universo Android chamada Retrofit.

Suponha que sua URL seja http://www.servidor.com.br/grupos.

Com o Retrofit, ficaria algo assim:

public interface MinhaApi {
  @GET("grupos")
  Call<List<Group>> pegaGrupos();
}

Esse código abaixo pode ficar no seu onCreate:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://www.servidor.com.br/")
    .build();

MinhaApi api = retrofit.create(MinhaApi.class);

api.pegaGrupos().enqueue(new ApiCallback(InterestGroupsListActivity.this));

Essa classe ApiCallback é só uma classe para tratar a resposta do servidor. Lembre-se que isso é uma chamada assíncrona.

public class ApiCallback implements Callback<List<Group>> {

    private InterestGroupsListActivity activity;

    public ApiCallback(InterestGroupsListActivity activity) {
        this.activity = activity;
    }

    @Override
    public void onResponse(Call<List<Group>> call, Response<List<Group>> response) {
        List<Group> gruposDaResposta = response.body();
        activity.exibeLista(gruposDaResposta);
    }

    @Override
    public void onFailure(Call<List<Group>> call, Throwable t) {
    }
}

Por fim, seu exibeLista, ficaria na activity:

public void exibeLista(List<Group> groups) {
    ListView listGroups = (ListView) findViewById(R.id.list_groups);
    ArrayAdapter<Group> adapter = new ArrayAdapter<Group>(this,  android.R.layout.simple_list_item_1, groups);
    listGroups.setAdapter(adapter);
}

Dá uma olhada nesse curso da Alura focado em comunicação entre um app Android e um servidor.