У меня есть приложение, которое загружает изображения с сервера, добавляет водяной знак, а затем позволяет пользователю обмениваться ими через другие приложения. Я использую Picasso для загрузки изображений в мишени.
Проблема в том, что загрузка изображений в мишени занимает немного времени, поэтому мне нужно найти способ дождаться завершения процесса. Я читал о CompletableFuture, но он нацелен только на Android +24, и это недопустимо.
Вот что я сделал до сих пор
//Global var
final List<Target> remoteImgTargets = new ArrayList<>();
//method
List<ImageToShare> remoteImages = new ArrayList<>();
final ArrayList<Uri> finishedImages = new ArrayList<>();
int countImages = remoteImages.size();
for (int i = 0; i < countImages; i++) {
final int k=i;
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
remoteImgTargets.remove(this);
//Add watermark here
finishedImages.add(Utils.getLocalBitmapUri(watermakedBmp, context));
Log.e("Targets", "Loaded: " + k);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
remoteImgTargets.remove(this);
Log.e("Targets", "onBitmapFailed(): ");
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.e("Targets", "Preparing: " + k);
}
};
remoteImgTargets.add(target);
Picasso.with(context)
.load(remoteImages.get(k).getImageurl()) // Start loading the current target
.into(target);
}
Далее я использую RxAndroid для наблюдения за процессом и обработки
ArrayList<Uri> globalUriArray = new ArrayList<>();
Observable<Uri> observable2 = Observable
.fromIterable(finishedImages)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observer<Uri> observer = new Observer<Uri>() {
@Override
public void onSubscribe(Disposable d) {
//TODO
}
@Override
public void onNext(Uri uri) {
globalUriArray.add(uri);
}
@Override
public void onError(Throwable e) {
//TODO
}
@Override
public void onComplete() {
if(globalUriArray.size()>0) {
//Display share intent
}
}
};
observable2.subscribe(observer);
* Проблема * Целевая загрузка остается позади, и загружается лишь небольшая часть изображений.
Требуется помощь Как ждать, пока цели Пикассо завершат загрузку и, возможно, ответный огонь, если это возможно, или что-нибудь.
Заранее спасибо ...