Android/Java : 有没有办法在侦听器触发后调用方法的 return ?

Android/Java : Is there a way to call the return of the method after a listener triggered?

我正在使用 Volley 从 HTTP Api 获取 JSONObject。

我的问题是我希望我的方法等待 Response Listener 获得结果,否则我的方法将返回空对象。
我尝试使用同步等待和通知来实现它,但它似乎不起作用,activity 在 isFinished.wait()[=20= 之后冻结] 并且侦听器不会触发。你能告诉我我的代码有什么问题吗?

public JSONObject query(String url) throws InterruptedException {
    finished=false;
    Req = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            synchronized (isFinished){
                Retour = response;
                finished = true;
                isFinished.notifyAll();
            }
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            synchronized (isFinished){
                Retour = null;
                finished = true;
                isFinished.notifyAll();
            }
        }
    });
    Queue.add(Req);
    synchronized (isFinished) {
        while (!finished) {
            isFinished.wait();
        }
        return Retour;
    }
}

我通过更改设计解决了它,所以该方法没有 return 任何东西,而是回调 Consumer 接口,然后将结果检索到 class 字段 数据 :

Consumer<JSONObject> cons = a -> Data=a;

原代码变为:

public void query(String url,Consumer<JSONObject> cons) {
    Req = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Retour = response;
            callb.accept(Retour);
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Retour = null;
            callb.accept(null);
        }
    });
    Queue.add(Req);
}