[英]Asynchronous multiple photos upload with Firebase
誰能幫我。
我在使用Firebase上傳多張照片時遇到問題。 我的問題是,當我循環瀏覽要上傳的照片時,UploadTask似乎在單獨的線程上工作,因此循環迭代所有照片,而第一張照片仍在上傳,我想一個一個地上傳它們,這樣循環就不會迭代到下一張照片,除非已上傳第一張照片
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch(item.getItemId()){
case R.id.add_photo_option:
item.setEnabled(false);
final ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
for (int x = 0; x < photosList.getAdapter().getItemCount(); x++){
int photoNumber = x+1;
dialog.setTitle("Uploading photo no: " + photoNumber);
dialog.show();
ImageAdapter adapter = (ImageAdapter) photosList.getAdapter();
Uri photoUri = adapter.getPhotoUri(x);
String path = "photos/" + UUID.randomUUID() + ".png";
StorageReference storage = mStorageRef.getReference(path);
UploadTask task = storage.putFile(photoUri);
task.addOnProgressListener(getActivity(), new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
long progress = taskSnapshot.getBytesTransferred();
long totalBytes = taskSnapshot.getTotalByteCount();
dialog.setMessage("Uploading: " + progress + " KBs out of " + totalBytes + " KBs");
}
});
task.addOnSuccessListener(getActivity(), new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
dialog.setMessage("Uploaded");
item.setEnabled(true);
Toast.makeText(getActivity(), taskSnapshot.getDownloadUrl().toString(), Toast.LENGTH_SHORT).show();
}
});
}
dialog.dismiss();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我可以給您一個算法(只需為JS回答即可):
// set it up
firebase.storage().ref().constructor.prototype.putFiles = function(files) {
var ref = this;
return Promise.all(files.map(function(file) {
return ref.child(file.name).putFile(file);
}));
}
// use it!
firebase.storage().ref().putFiles(files).then(function(metadatas) {
// Get an array of file metadata
}).catch(function(error) {
// If any task fails, handle this
});
您可以使用Android Tasks.whenAll
( docs , blog post )做類似的事情:創建一個任務數組,然后使用whenAll()
啟動它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.