Ich habe dieses sehr einfaches Stück Code mit der Bibliothek retrofit-2.1.0
Retrofit2 asynchroner Rückruf ist nicht
public class UserManager {
private static final Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MY_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
private static final UserService service = retrofit.create(UserService.class);
public static User getUserById(Integer userId) {
Call<User> call = service.getUser(userId);
final User[] user = new User[1];
final boolean[] isCalled = {false};
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
System.err.println("CALLED");
user[0] = response.body();
isCalled[0] = true;
}
@Override
public void onFailure(Call<User> call, Throwable t) {
isCalled[0] = true;
}
});
return user[0];
}
interface UserService {
@GET("users/{user_id}")
Call<User> getUser(@Path("user_id") Integer userId);
}
}
ich telefonieren bin es aus JUnit4 Test genannt.
public class UserManagerTest {
@Test
public void testGetBattleById() throws Exception {
User user = UserManager.getUserById(1);
}
}
Meine User
Klasse ist in Ordnung und Gson ist in der Lage JSON
in sie serialisiert werden. Die URL ist auch in Ordnung. Das Problem ist weder onResponse
, noch wird onFailure
tatsächlich aufgerufen. isCalled[0]
bleibt false
, user[0]
bleibt null
und ich sehe nichts in stderr.
Ich habe dieses Problem gegoogelt und einige sehr ähnliche Fälle gefunden, aber leider keine echte Lösung. Was mache ich falsch?
[Es genannt wird] (http://ideone.com/PPHi95), nicht aber dann, wenn Sie denken ... – Selvin
Sie den Benutzer nicht direkt nach dem Aufruf zurückkehren kann ... Es wird immer Null zurückgeben, da die Anfrage asynchron ist und Sie es auf eine synchrone Art und Weise verwenden. – Jaythaking