У меня есть общий пользовательский вопрос слушателя / обратного вызова.В моем коде у меня есть следующий интерфейс и класс LocalDB
, который читает базу данных комнаты:
# Custom interface
public interface MyInterface {
void OnSuccess();
void OnFailure();
}
# Class LocalDB
public class LocalDB {
private MyInterface myInterface;
public static PIMUserLocalDataSource getInstance(@NonNull Context context)
{
if (INSTANCE == null) {
synchronized (PIMUserLocalDataSource.class) {
INSTANCE = new PIMUserLocalDataSource(context);
}
}
return INSTANCE;
}
public void setCustomListener(CustomListener customListener) {
this.customListener = customListener;
}
private void queryA() {
Runnable runnable = new Runnable() {
result = appDatabase.myDao().getQueryA();
if (result != null) {
if (customListener != null) {
customListener.onSuccess();
} else {
customListener.onFailure();
}
}
}
}
private void queryB() {
Runnable runnable = new Runnable() {
result = appDatabase.myDao().getQueryB();
if (result != null) {
if (customListener != null) {
customListener.onSuccess();
} else {
customListener.onFailure();
}
}
}
}
}
# Fragment / Activity
LocalDB myDB = LocalDB.getInstance(context)
myDB.setCustomListener(new CustomListener) {
@Override
public void OnSuccess() {
Log.e(logTag, "Success queryA");
}
@Override
public void OnFailure() {
Log.e(logTag, "Failed queryA");
}
}
myDB.queryA()
myDB.setCustomListener(new CustomListener) {
@Override
public void OnSuccess() {
Log.e(logTag, "Success queryB");
}
@Override
public void OnFailure() {
Log.e(logTag, "Failed queryB");
}
}
myDB.queryB()
Проблема
В большинстве случаев это работает нормально, однако иногда это queryA
медленно и queryB
выполняется до queryA
, queryB
обратного вызова на queryB
не проблема, но когда queryA
завершено, это обратный вызов на queryB
слушателя.Я думаю, потому что слушатель B перезаписал A?Как мне избежать подобных проблем?