Pergunta

Estou tentando explorar o Retrofit + OkHttp no Android.Aqui está um código que encontrei online:

RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();

Se eu não usar o serviço executor, meu código estará sendo executado no thread principal?Devo fazer solicitações da web em um novo tópico?

Foi útil?

Solução

O método que retorna um valor faz isso de forma síncrona.

@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);

Para fazer isso de forma assíncrona, tudo que você precisa é adicionar um retorno de chamada.

@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);

Espero que isto ajude.

Cumprimentos!

Outras dicas

Os métodos de retrofit podem ser declarados para execução síncrona ou assíncrona.

Um método com tipo de retorno será executado de forma síncrona.

@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);

A execução assíncrona requer que o último parâmetro do método seja um Callback.

@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);

No Android, os retornos de chamada serão executados no thread principal.Para aplicativos de desktop, os retornos de chamada acontecerão no mesmo thread que executou a solicitação HTTP.

Retrofit também integra RxJava para suportar métodos com um tipo de retorno de rx.Observable

@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);

As solicitações observáveis ​​são assinadas de forma assíncrona e observadas no mesmo thread que executou a solicitação HTTP.Para observar em um tópico diferente (por ex.Thread principal do Android) chamada observeOn(Scheduler) no devolvido Observable.

Observação:A integração RxJava é experimental.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top