Potrzebuję zalogować się na swój serwer.
Wysyłam zapytanie HTTP GET używając Retrofita (+gson +okhttp). Tak wygląda implementacja interfejsu:
public interface LoginLogoutService {
@GET("/api/user")
void idLogin(
@Query("action") String action,
@Query("id") String id,
@Query("password") String password,
Callback<ResponseLogin> cb
);
}
Tak wygląda moja obsługa tego:
private boolean powerLogin(){
boolean status = false;
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(url)
.build();
final LoginLogoutService loginLogoutService = restAdapter.create(LoginLogoutService.class);
loginLogoutService.idLogin("login", powerId, powerPassword, new Callback<ResponseLogin>() {
@Override
public void success(ResponseLogin responseLogin, retrofit.client.Response response2) {
Log.i("INFO", "ResponseUsers: " + responseLogin.getStatus());
}
@Override
public void failure(RetrofitError retrofitError) {
Log.e("ERR", retrofitError.getUrl());
Log.e("ERR", retrofitError.getResponse().getReason());
}
});
return status;
}
Pozytywna odpowiedź z serwera wygląda tak:
{
"status": "OK"
}
Po mojej metodzie widzicie, że próbuję w jakiś sposób uzyskać odpowiedź czy logowanie się powiodło czy nie. Chciałbym dostać ten obiekt.
Próbowałem zaimplementować coś w ten sposób:
...
static RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(url)
.build();
...
static LoginLogoutService loginLogoutService = restAdapter.create(LoginLogoutService.class);
...
private boolean powerLogin2(){
Response response = loginLogoutService.objectIdLogin("login", powerId, powerPassword);
return response.getStatus() == 200;
}
Razem z retrofitem:
@GET("/api/user")
Response objectIdLogin(
@Query("action") String action,
@Query("id") String id,
@Query("password") String password
);
... ale takie rozwiązanie jest synchroniczne i częstuje mnie Networking on main.
Wytłumaczcie proszę jak idiocie - jak powinienem rozwiązać ten problem?
Okej, pewnie jakoś przepuszczanie jednej wartości bym pominął. Ale mam jeszcze do przerobienia metodę getUser, która obiera mi jeden obiekt z kilkoma polami. W dokumentacji i przykładach w necie nie znalazłem rozwiązania odpowiadającego mojemu problemowi...