作者grezod (grezod)
看板java
标题[问题如何限制某个方法跑完才执行下个方法
时间Fri Feb 3 22:15:55 2017
想请问一下版上高手
本人目前在写一个安卓APP的功能页
功能是可以上传图片到网路图床後取回网址
并把网址写入云端的资料库
送REQUEST的套件用的是OKHTTP
但是这套件用的好像是多执行绪
所以出现一个状况是 我图片还没上传完取到网址
在上传方法下面 写入资料库的方法就先跑了.....
结果就是网址都还没拿到 资料就已经写完了
所以想请问一下有什麽办法限制一定要上传完取回网址後 程式才继续往下跑
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.254.208.101
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1486131357.A.CAC.html
1F:→ ssccg: 那你就等取完网址再呼叫上传云端啊? 自己连呼叫两次是? 02/03 22:23
2F:→ grezod: 修正一下 套件是AsyncHttpClient 02/03 22:24
3F:→ grezod: 问题点就是上传的方法明明在传图下面 02/03 22:24
4F:→ ssccg: android如果在main thread呼叫一定是用非同步API,完成後才 02/03 22:28
5F:→ ssccg: 继续是要写在callback里,不是下一行 02/03 22:29
6F:→ grezod: 谢谢s大 callback是个好方法 02/03 22:35
7F:→ grezod: 不过因为我的程式是用for回圈设变数动态对应不同的图片数 02/03 22:36
8F:→ grezod: 量 02/03 22:36
9F:→ grezod: 不是一个接一个 所以是否有办法判断多个上传的执行绪都跑 02/03 22:38
10F:→ grezod: 完後 才跑写资料库的方法 02/03 22:38
11F:→ ssccg: 当然可以但是怎麽写比较简单要看你用的library和版本 02/03 22:53
12F:→ grezod: 请问S大有什麽关键字或网页可参考的吗 02/03 23:04
13F:→ ssccg: 如果library没,最通用的大概是ExecutorService的invokeAll 02/03 23:05
14F:→ grezod: 我估狗看看 感谢 02/03 23:09
15F:→ ssccg: 最简单的作法是CompletableFuture但是要7.0+或用别的lib 02/03 23:12
16F:→ grezod: 好的 谢谢分享! 02/03 23:17
17F:→ AminLA: 这用countdownlatch 可以实现,但要记得处理好time out与 02/04 17:15
18F:→ AminLA: 异常 02/04 17:15
19F:→ grezod: 回报一下结果 我用S大说的invokeall 好像跟asyncHttpClie 02/04 22:01
20F:→ grezod: 会相冲 只要一跑到送POST那行就会停摆 02/04 22:02
21F:→ grezod: 後来改用AMI大说的COUNTDOWNLATCH 有成功达到我要的效果 02/04 22:03
22F:→ grezod: 不过奇怪的是我要显示读取中的DIALOG他一定要等TASK跑完才 02/04 22:03
23F:→ grezod: 会出现 02/04 22:03
24F:→ ssccg: 你现在的作法大概是block了main thread... 02/05 00:34
25F:→ ssccg: 要用Executor或Future系列的东西,就不用async client 02/05 00:34
26F:→ ssccg: 直接在Executor的thread上用同步方式执行就好 02/05 00:35
27F:→ ssccg: 然後负责等所有工作完成的(invokeAll/latch的await)也必须 02/05 00:36
28F:→ ssccg: 另起一个thread来做,才不会block main thread 02/05 00:36
29F:→ ssccg: main thread的观念是android(其他GUI framework大概也是) 02/05 00:38
30F:→ ssccg: 必须要弄清楚的 02/05 00:39
31F:→ grezod: 感谢分享! 02/05 08:17