当前位置: 代码迷 >> Android >> Android自定义列表器回调到其他位置 问题
  详细解决方案

Android自定义列表器回调到其他位置 问题

热度:26   发布时间:2023-08-04 12:27:12.0

我有一个一般的自定义监听器/回调问题。 在我的代码中,我具有以下用于读取会议室数据库的接口和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之前完成queryAqueryB回调queryB没有问题,但是当queryA做,它回调queryB听众。 我认为是因为B的听众覆盖了A? 我应该如何避免这种问题?

当您调用queryA或queryB时。 通过听众。

# Custom interface
public interface MyInterface {
    void OnSuccess();
    void OnFailure();
}

# Class LocalDB
public class LocalDB {

boolean successA,successB;


    public static PIMUserLocalDataSource getInstance(@NonNull Context context) 
    {
        if (INSTANCE == null) {
            synchronized (PIMUserLocalDataSource.class) {
                INSTANCE = new PIMUserLocalDataSource(context);
            }
        }
        return INSTANCE;
    }


    private void queryA(CustomListener customListener) {
        Runnable runnable = new Runnable() {
            result = appDatabase.myDao().getQueryA();
            if (result != null) {
                if (customListener != null) {
                    customListener.onSuccess();
                } else {
                    customListener.onFailure();
                }
            }
        }
    }

    private void queryB(CustomListener customListener) {
        Runnable runnable = new Runnable() {
            result = appDatabase.myDao().getQueryB();
            if (result != null) {
                if (customListener != null) {
                    customListener.onSuccess();
                } else {
                    customListener.onFailure();
                }
            }
        }
    }
}

# Fragment / Activity
LocalDB myDB_A = LocalDB.getInstance(context)
myDB.setCustomListener(new CustomListener) {
    @Override
    public void OnSuccess() {
        successA=true;
        checkIfTwoFinishedExcutecode();
        Log.e(logTag, "Success queryA");
    }

    @Override
    public void OnFailure() {
        Log.e(logTag, "Failed queryA");
    }
}
myDB.queryA(myDB_A )

LocalDB myDB_B = LocalDB.getInstance(context)
    @Override
    public void OnSuccess() {
    successB=true;
    checkIfTwoFinishedExcutecode(); 
    Log.e(logTag, "Success queryB");
    }

    @Override
    public void OnFailure() {
        Log.e(logTag, "Failed queryB");
    }
}
myDB.queryB(myDB_B)


void checkIfTwoFinishedExcutecode(){
if(successA&&successB){
// the two is finished. write your code
}


}
  相关解决方案