Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Problemas ao enviar o aluno ao servidor

Olá! Fiz a aula com o professor, e recebi um erro no teste final. Ao enviar um aluno para o servidor, o app sempre chama o onFailure aqui:

Call call = new RetrofitInicializador().getAlunoService().insere(aluno);
                call.enqueue(new Callback() {
                    @Override
                    public void onResponse(Call call, Response response) {
                        Log.i("onResponse", "requisicao com sucesso");
                    }

                    @Override
                    public void onFailure(Call call, Throwable t) {
                        Log.e("onFailure", "requisicao falhou");
                    }
                });

Coisas que observei:

  1. O enqueue diz "Unchecked call to 'enqueue(Callback)' as a member of raw type 'retrofit2.Call'"

  2. Na hora de pesquisar as libraries para incluir nas dependencies, o Android Studio não encontrava de jeito nenhum, mas eu adicionei na mão (as mesmas que o professor usou) e o build.gradle ficou assim:

    dependencies {
     implementation fileTree(include: ['*.jar'], dir: 'libs')
     implementation 'com.android.support:appcompat-v7:23.3.0'
     implementation 'com.android.support:cardview-v7:23.3.0'
     implementation 'com.android.support:support-v4:23.3.0'
     implementation 'com.google.android.gms:play-services:8.4.0'
     api 'com.squareup.retrofit2:retrofit:2.1.0'
     api 'com.squareup.retrofit2:converter-jackson:2.1.0'
    }

    Aí ele reclama na linha do appcompat, dizendo que todas as libraries deveriam usar exatamente a mesma versão (aponta como erro, mas o build é feito normalmente)

  3. O erro de duplicação de arquivo não ocorre comigo, mas escrevendo o packagingOptions ou não, o erro persiste.

  4. Algumas linhas parecidas com essa aparecem antes de mostrar que a requisição falhou:

12-04 22:33:24.119 9780-9881/br.com.alura.agenda E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab64ae60

Alguém pode me ajudar? Obrigado desde já!

7 respostas

Oi Gabriel, tudo bem?

Pode enviar o service que implementou? Acredito que o problema seja a implementação do callback de maneira genérica, ou seja, sem indicar o tipo do do retorno esperado... Mesmo que não é esperado um retorno, a call precisa ser tipada, nesse caso, pode ser com o tipo Void.

[]s

Olá professor! Tudo bem sim. Acredito que esse não seja o problema, mas aí está o código:

public interface AlunoService {

    @POST("aluno")
    Call<Void> insere(@Body Aluno aluno);
}

Se precisar de mais alguma coisa, é só dizer!

Oi Gabriel, o service está certinho, no caso seria a implementação da Call que no código onde você mostrou não pega o generics, veja como seria a implementação:

Call<Void> call = new RetrofitInicializador().getAlunoService().insere(aluno);
call.enqueue(new Callback<Void>() {
 @Override
 public void onResponse(Call<Void> call, Response<Void> response) {

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

 }});

Se com essa modificação não funcionar, consegue me mandar o projeto via GitHub para eu dar uma olhada?

[]s

Professor, estou tendo muitos erros com o git, minha pasta .git sumiu e não consigo dar commit nem add de maneira alguma.

Teria outro jeito de eu te enviar o projeto?

solução!

Tenta me mandar via Google Drive, ou então, pode mandar da maneira que for mais fácil para você.

Uma outra sugestão também, é que existe a possibilidade de pegar o projeto da aula no primeiro exercício da próxima aula, no seu caso seria no primeiro exercício da aula 3.

Dessa forma, você tem a possibilidade de consultar o que foi feito na aula e como está o seu código :)

Oi, desculpa a demora, precisei resolver uns problemas fora do PC hahahah Comparei os arquivos como você sugeriu e percebi que a besteira estava muito longe de onde estávamos procurando. Coloquei o baseUrl do RetrofitInicializador sem o final "api/", e o server não estava conseguindo resolver a requisição.

De qualquer forma, obrigado pela disposição e ajuda!

Opa Gabriel, acontece hehehe

É normal errar a URL por isso que às vezes dando uma olhada no código que foi feito na aula ajuda a verificar se tem alguma diferença.

Se tiver mais alguma dúvida, fique à vontade em entrar em contato com a gente. Bons estudos! :)

[]s