通过屏幕反馈将多个图像发布到服务

时间:2014-08-03 21:00:06

标签: android android-asynctask loopj

我对Android开发相当新,并且有很多值得关注的东西。 我有一个概念性的问题。在IOS中看起来相当简单,我无法在Android中找到答案。

以下是我想要完成的事情:

我需要遍历设备照片并将其一次发布到一些网络服务。

  • 在上传图片时,我需要在屏幕上显示当前上传的照片以及当前上传的进度条。
  • 我还需要显示剩余要上传的照片总数。
  • 除此之外,我需要在屏幕上显示2个按钮 - "取消当前上传"和"暂停所有" (希望它能解释这些按钮需要做什么)。

问题是,在通过MediaStore进行迭代时,它似乎锁定了当前线程,如果我在主UI线程上执行,那么显然,图像会上传,但我不会看到任何内容屏幕直到所有上传完成。为了克服这个问题,我试图启动一个新的AsyncTask并以这种方式迭代。对于上传,我使用loopj库,它只能在从主UI线程开始上传时异步上传。由于从AsychTask运行的线程开始上传,我被迫使用同步客户端,在上传完成之前不会返回响应句柄,这意味着我永远无法取消当前的上传操作。为了解决这个问题,我试图从AsynchTask迭代器中为每个图像上传产生新的意图并等待它返回,直到进入下一个具有可怕外观的迭代器周期 - Intents屏幕弹出并向下折叠动画太烦人,看起来很可怕。 Aghhh - 我所描述的解决方案非常复杂。我确定,我忽略了一些简单的愚蠢。 任何想法都将受到高度赞赏!

P.S。代码可以在这里找到: https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressActivity.java https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressDetailsActivity.java

1 个答案:

答案 0 :(得分:0)

我有一个有点工作的解决方案。我只是迭代AsynchTask中的MediaStore资产并在onProgressUpdate中启动异步上传,而且,因为(如果我理解正确的话)onProgressUpdate在主UI线程上工作,更新UI就像魅力一样工作,而不是为每次上传启动新意图。但是,仍然必须使用设置标志来表示上传当前处于活动状态,睡眠时间为100毫秒,检查标志,并在上传完成后继续播放光标中的下一个图像。

最新代码在github上更新: https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressActivity.java