0

我对 Android 开发还很陌生,有很多东西要赶上。我有一个概念问题。在 IOS 中似乎相当直截了当,我无法在 Android 中弄清楚。

这是我要完成的工作:

我需要遍历设备照片并一次将它们发布到某个网络服务。

  • 在上传图片时,我需要在屏幕上显示当前上传的照片以及当前上传的进度条。
  • 我还需要显示要上传的照片总数。
  • 除此之外,我还需要在屏幕上有 2 个按钮——“取消当前上传”和“全部暂停”(希望这些按钮需要做的事情很容易解释)。

问题是,在通过 MediaStore 进行迭代时,它似乎锁定了当前线程,如果我在主 UI 线程上执行此操作,那么很明显,图像将被上传,但我不会在屏幕上看到任何东西,直到所有上传完成。为了克服这个问题,我正在尝试启动一个新的 AsyncTask 并以这种方式进行迭代。对于上传,我使用的是 loopj 库,它只能在从主 UI 线程开始上传时异步上传。由于上传是从运行 AsychTask 的线程开始的,我不得不使用同步客户端,它在上传完成之前不会返回响应句柄,这意味着我永远无法取消当前的上传操作。为了克服这一点,我 我试图为从 AsynchTask 迭代器上传的每个图像生成新的意图,并等待它返回,直到进入下一个交互器循环,该循环具有可怕的外观——意图屏幕弹出并折叠动画,这太烦人了,看起来很可怕. 啊——我描述的解决方案是如此复杂。我敢肯定,我忽略了一些愚蠢的简单事情。任何想法将不胜感激!

PS代码可以在这里找到: 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

4

1 回答 1

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

于 2014-08-04T00:57:15.410 回答