使用翻新检查数据库中的值以进行登录操作。我不想在不进行检查的情况下前进,因此希望同步发生。
我使用的是execute方法而不是入队,但仍然异步获取结果。我知道如果我都在同一个类中执行所有操作,则可能会起作用,但是我试图将它们分开保存,以防止将来的其他调用重复执行代码。请告诉我我做错了什么或如何解决这个问题。谢谢。
当我单击提交按钮时,将发生以下方法。此方法在我的活动中。 请注意,此方法中的所有内容均有效。问题是在startService之后,它不等待从我的休息服务中获取信息,而是直接跳转到Toast。之后,它继续执行到那时就没用的执行方法。
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();
}
这是我的服务,在调用Toast之后进入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
}
}
}