method1();
method2();
if(result1 && result2)
{
method3();
}
假设method1()
仅验证文本框是否已填充且不为空,并且method2()
验证文本框的值是否在数据库中有重复项。
result1 and result2
是类布尔变量,
result1
将为true
;如果值没有重复,则result2
将为true
,因此method2
具有齐射请求。
method3()
是一个将有值插入表格的截击请求的过程。
我认为会发生的是:
method1()
将执行,result1
将为真或假,具体取决于结果
method2()
将执行,此方法中包含的排球流程将影响result2
,result2
将为真或假,具体取决于结果
resul1
和result2
将在if
声明中进行测试,如果它们都是true
并且将继续method3()
而不是那个,method2
中的截击请求需要时间或延迟发生,代码会进入if
和result1
的{{1}}语句检查之前result2
的截击请求响应。
这意味着即使整个表单有效,由于这种情况发生method2()
在result2
语句检查期间始终为false。
这是我观察到的。
所以现在我所做的是if
将在method3()
中的截击请求的onResponse
块上执行,method2()
将在{{1}的末尾执行}}
但是对我来说感觉很烦,而且我对此感到不舒服,按下按钮后发生的所有事情的延迟让我感到不舒服,因为它太长了。
我只是一名大学生,我刚刚学会了机器人和凌空,我不知道如何做得更好,或者如果有其他选择,请帮助我。如果我的解释听起来很愚蠢,我也很抱歉。无论如何,我可以改进这个过程,请告诉我。非常感谢。
答案 0 :(得分:0)
在Volley中发生这种情况的原因是请求是异步进行的,执行您收到响应后提供的回调。它不会阻止执行。
要与Volley一起做你想做的事,你可以将请求链接在一起。这意味着您只需在method2
的回调中执行method1
,并在method2
的回调中执行if语句。
根据您的使用案例,另一种方法是使用CountDownLatch
:https://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
为此,您需要为要等待的每个请求增加倒计时锁存的计数。然后在每种方法的响应中,您将计算锁定。一旦锁存计数达到0,等待将释放,允许执行if语句。