Использование Retrofit для проверки значений в базе данных для операции входа в систему.Я не хочу двигаться вперед без проверки, поэтому хочу, чтобы это происходило синхронно.
Я использую метод execute вместо enqueue, но все равно получаю результат асинхронно.Я понимаю, что если я делаю все это в одном классе, это может сработать, но я стараюсь держать вещи отдельно, чтобы предотвратить дублирование кода для других будущих вызовов.Пожалуйста, посоветуйте, что я делаю неправильно или как я могу решить эту проблемуБлагодарю.
Следующий метод происходит, когда я нажимаю кнопку отправки.Этот метод в моей деятельности.Обратите внимание, что все в этом методе работает.Проблема в том, что после startService он не ждет, чтобы получить информацию от моей службы отдыха, а вместо этого сразу переходит к тосту.После этого он продолжает выполнять метод execute, который к тому времени бесполезен.
private void sendLoginRequest(User user){
String token = verificationHelper.createToken(properties.API_KEY, user, 60000);
Retrofit retrofit = retrofitHelper.getRetrofit(properties.BASE_URL);
UserRepository userRepository = retrofit.create(UserRepository.class);
Call<User> call = userRepository.login(token);
if(call != null){
syncService = new SyncService(call);
Intent i = new Intent(this, SyncService.class);
startService(i);
if(verificationHelper.isValidLogin()){
goToMainActivity();
}
}
Toast.makeText(this, "Invalid Login", Toast.LENGTH_SHORT).show();
}
Это мой сервис, который входит в метод onHandleIntent после вызова Toast.(Ожидая, что это будет вызвано первым и проверено прежде, чем когда-либо попадет на тост).
public class SyncService extends IntentService {
private VerificationHelper verificationHelper = new VerificationHelper();
private PropertiesUtil properties = new PropertiesUtil();
private RetrofitHelper retrofitHelper = new RetrofitHelper(verificationHelper, properties);
private static Call<User> staticCall;
public SyncService(Call<User> call) {
super("SyncService");
staticCall = call;
}
public SyncService(){
super("SyncService");
}
@Override
protected void onHandleIntent(Intent intent) {
retrofitHelper.performCallBackSync(staticCall);
}
}
Это закончено в моем RetrofitHelper для справки.
public class RetrofitHelper {
private VerificationHelper verificationHelper;
private PropertiesUtil properties;
public RetrofitHelper(VerificationHelper verificationHelper, PropertiesUtil properties) {
this.verificationHelper = verificationHelper;
this.properties = properties;
}
public void performCallBackSync(Call<User> call){
try {
// some logic that handles and verifies token values.
verificationHelper.setValidLogin(true);
} catch (IOException e) {
//some error handling
}
}
}