【发布时间】:2019-02-20 20:50:33
【问题描述】:
我有一个通用的自定义侦听器/回调问题。
在我的代码中,我有以下接口和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?我应该如何避免这种问题?
【问题讨论】:
标签: android interface callback