[问题如何限制某个方法跑完才执行下个方法

楼主: grezod (grezod)   2017-02-03 22:15:55
想请问一下版上高手
本人目前在写一个安卓APP的功能页
功能是可以上传图片到网络图床后取回网址
并把网址写入云端的数据库
送REQUEST的套件用的是OKHTTP
但是这套件用的好像是多执行绪
所以出现一个状况是 我图片还没上传完取到网址
在上传方法下面 写入数据库的方法就先跑了.....
结果就是网址都还没拿到 资料就已经写完了
所以想请问一下有什么办法限制一定要上传完取回网址后 程式才继续往下跑
作者: ssccg (23)   2017-02-03 22:23:00
那你就等取完网址再呼叫上传云端啊? 自己连呼叫两次是?
楼主: grezod (grezod)   2017-02-03 22:24:00
修正一下 套件是AsyncHttpClient问题点就是上传的方法明明在传图下面
作者: ssccg (23)   2017-02-03 22:28:00
android如果在main thread呼叫一定是用异步API,完成后才继续是要写在callback里,不是下一行
楼主: grezod (grezod)   2017-02-03 22:35:00
谢谢s大 callback是个好方法不过因为我的程式是用for回圈设变量动态对应不同的图片数量不是一个接一个 所以是否有办法判断多个上传的执行绪都跑完后 才跑写数据库的方法
作者: ssccg (23)   2017-02-03 22:53:00
当然可以但是怎么写比较简单要看你用的library和版本
楼主: grezod (grezod)   2017-02-03 23:04:00
请问S大有什么关键字或网页可参考的吗
作者: ssccg (23)   2017-02-03 23:05:00
如果library没,最通用的大概是ExecutorService的invokeAll
楼主: grezod (grezod)   2017-02-03 23:09:00
我估狗看看 感谢
作者: ssccg (23)   2017-02-03 23:12:00
最简单的作法是CompletableFuture但是要7.0+或用别的lib
楼主: grezod (grezod)   2017-02-03 23:17:00
好的 谢谢分享!
作者: AminLA (101)   2017-02-04 17:15:00
这用countdownlatch 可以实现,但要记得处理好time out与异常
楼主: grezod (grezod)   2017-02-04 22:01:00
回报一下结果 我用S大说的invokeall 好像跟asyncHttpClie会相冲 只要一跑到送POST那行就会停摆后来改用AMI大说的COUNTDOWNLATCH 有成功达到我要的效果不过奇怪的是我要显示读取中的DIALOG他一定要等TASK跑完才会出现
作者: ssccg (23)   2017-02-05 00:34:00
你现在的作法大概是block了main thread...要用Executor或Future系列的东西,就不用async client直接在Executor的thread上用同步方式执行就好然后负责等所有工作完成的(invokeAll/latch的await)也必须另起一个thread来做,才不会block main threadmain thread的观念是android(其他GUI framework大概也是)必须要弄清楚的
楼主: grezod (grezod)   2017-02-05 08:17:00
感谢分享!

Links booklink

Contact Us: admin [ a t ] ucptt.com