2014-08-03 4 views
0

Я довольно новичок в разработке Android и многому улавливаю. У меня есть концептуальный вопрос. То, что кажется довольно прямым в IOS, я не могу понять в Android.отправка нескольких изображений в службу с обратной связью на экране телефона

Вот что я пытаюсь выполнить:

мне нужно перебирать фотографии устройства и отправить их по одному за раз в какой-то веб-службы.

  • Во время загрузки изображения мне нужно показать текущую фотографию на экране вместе с индикатором текущей загрузки.
  • Мне также нужно показать общее количество фотографий, оставленных для загрузки.
  • Наряду с этим мне нужно иметь 2 кнопки на экране - «Отменить текущую загрузку» и «Приостановить все» (надеюсь, что очень понятно, что эти кнопки должны делать).

Проблема заключается в том, что в то время как итерация через MediaStore, кажется, блокирует текущий поток и, если я делаю это в основном потоке пользовательского интерфейса, то, очевидно, изображения будут загрузки, но я бы не видел все на экране, пока все загрузки не будут выполнены. Чтобы преодолеть это, я пытаюсь запустить новую AsyncTask и повторить этот путь. Для загрузок я использую библиотеку loopj, которая может загружаться только асинхронно, когда загрузка начинается с основного потока пользовательского интерфейса. Поскольку загрузка начинается с потока, в котором работает AsychTask, я вынужден использовать синхронный клиент, который не возвращает ответный дескриптор до завершения загрузки, а это значит, что я никогда не смогу отменить текущую загрузку. Чтобы преодолеть это, я пытаюсь создать новое намерение для каждой загрузки изображения из итератора AsynchTask и дождаться его возвращения, пока не перейду к следующему циклу interator, который имеет ужасный внешний вид. Экран 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

ответ

0

Я получил несколько рабочее решение. Вместо того, чтобы запускать новое намерение для каждой загрузки, я просто перебираю ресурсы MediaStore в AsynchTask и запускаю асинхронную загрузку внутри onProgressUpdate, и, поскольку (если я правильно ее понимаю) onProgressUpdate работает в основном потоке пользовательского интерфейса, обновление пользовательского интерфейса работает как шарм , Тем не менее, нужно поиграть в трюки с флагом установки, указывающим, что загрузка в данный момент активна, спящий на 100 мс, проверка флажка, и как только загрузка будет выполнена, перейдите к следующему изображению в курсоре.

Последний код обновляется на GitHub: https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressActivity.java