Я загружаю 6 изображений в хранилище Firebase и сохраняю пути к изображениям и некоторые данные в базе данных Firebase.Пока это работает, когда загружаются только все 6 изображений.
Я библиотека BSimagePicker https://github.com/siralam/BSImagePicker, чтобы выбрать несколько изображений, затем загрузить их в хранилище и сохранить пути в базе данных.
Проблема, с которой я столкнулся, заключается в том, что если я хочу загрузить менее 6 изображений, то происходит сбой, и он указывает на НЕДОСТАТОЧНЫЙ PUTFILE.Как мне сделать условие, что если uri имеет значение null, тогда все в порядке, чтобы загрузить?
Кроме того, каков наилучший подход к способу обработки пути загрузки?
Я могу 'найти руководство по загрузке нескольких файлов и сохранить их пути к базе данных в реальном времени.Все это один файл.
private void startPosting() {
mPost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(ImageLoader.TAG, "onClick: attempting to post...");
if (!isEmpty(mTitle.getText().toString())
&& !isEmpty(mDescription.getText().toString())
&& !isEmpty(mPrice.getText().toString())
&& !isEmpty(mCountry.getText().toString())
&& !isEmpty(mStateProvince.getText().toString())
&& !isEmpty(mCity.getText().toString())
&& !isEmpty(mContactEmail.getText().toString())) {
if (mAllUri != null ) {
Toast.makeText(getActivity(), "uploading image", Toast.LENGTH_SHORT).show();
final String postId = FirebaseDatabase.getInstance().getReference().push().getKey();
StorageReference filepath = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image");
final StorageReference filepath1 = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image1");
final StorageReference filepath2 = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image2");
final StorageReference filepath3 = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image3");
final StorageReference filepath4 = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image4");
final StorageReference filepath5 = FirebaseStorage.getInstance().getReference()
.child("posts/users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() +
"/" + postId + "/post_image5");
final Uri[] firebaseUri = new Uri[1];
final Uri[] firebaseUri1 = new Uri[1];
final Uri[] firebaseUri2 = new Uri[1];
final Uri[] firebaseUri3 = new Uri[1];
final Uri[] firebaseUri4 = new Uri[1];
final Uri[] firebaseUri5 = new Uri[1];
filepath.putFile(mSelectedUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
firebaseUri[0] = taskSnapshot.getDownloadUrl();
filepath1.putFile(mSelectedUri1).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
firebaseUri1[0] = taskSnapshot.getDownloadUrl();
filepath2.putFile(mSelectedUri2).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
firebaseUri2[0] = taskSnapshot.getDownloadUrl();
filepath3.putFile(mSelectedUri3).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
firebaseUri3[0] = taskSnapshot.getDownloadUrl();
filepath4.putFile(mSelectedUri4).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
firebaseUri4[0] = taskSnapshot.getDownloadUrl();
filepath5.putFile(mSelectedUri5).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
firebaseUri5[0] = taskSnapshot.getDownloadUrl();
Post post = new Post();
post.setCity(mCity.getText().toString());
post.setContact_email(mContactEmail.getText().toString());
post.setCountry(mCountry.getText().toString());
post.setDescription(mDescription.getText().toString());
post.setPost_id(postId);
post.setPrice(mPrice.getText().toString());
post.setState_province(mStateProvince.getText().toString());
post.setTitle(mTitle.getText().toString());
post.setUser_id(FirebaseAuth.getInstance().getCurrentUser().getUid());
post.setImage(firebaseUri[0].toString());
post.setImage1(firebaseUri1[0].toString());
post.setImage2(firebaseUri2[0].toString());
post.setImage3(firebaseUri3[0].toString());
post.setImage4(firebaseUri4[0].toString());
post.setImage5(firebaseUri5[0].toString());
reference.child(getString(R.string.node_posts))
.child(postId)
.setValue(post);
showProgressBar();
resetFields();
}
});
}//file4
});//file4
} //file3
}); //file3
}//file2
}); //file2
}//file1
});//file1
}
});
}
//
}
}
});
}
Вот функция, которая извлекает uri:
@Override
public void onMultiImageSelected(List<Uri> uriList, String tag) {
for (int i = 0; i < uriList.size(); i++) {
mAllUri = uriList.get(i);
if (i >= 6) return;
ImageView iv;
switch (i) {
case 0:
iv = ivImage1;
mSelectedUri = uriList.get(0);
Log.d(ImageLoader.TAG, "aissa image" + mSelectedUri);
break;
case 1:
iv = ivImage2;
mSelectedUri1 = uriList.get(1);
Log.d(ImageLoader.TAG, "aissa1 image" + mSelectedUri1);
break;
case 2:
iv = ivImage3;
mSelectedUri2 = uriList.get(2);
break;
case 3:
iv = ivImage4;
mSelectedUri3 = uriList.get(3);
break;
case 4:
iv = ivImage5;
mSelectedUri4 = uriList.get(4);
break;
case 5:
default:
iv = ivImage6;
mSelectedUri5 = uriList.get(5);
}
Glide.with(this).load(uriList.get(i)).into(iv);
}
}
Полный класс: https://pastebin.com/BR6M8jC2