i build a chat application using firebase and i want to send multiple image to firebase storage.
using this library
compile 'com.github.darsh2:MultipleImageSelect:3474549'
At the top
private StorageReference storageRef;
private FirebaseApp app;
private FirebaseStorage storage;
onCreate()Method
app = FirebaseApp.getInstance();
storage =FirebaseStorage.getInstance(app);
button click action
Gallary.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ChatActivity.this, AlbumSelectActivity.class);
intent.putExtra(Constants.INTENT_EXTRA_LIMIT, 10);
startActivityForResult(intent, Constants.REQUEST_CODE);
pwindo1.dismiss();
}
});
Activity result
if (requestCode == Constants.REQUEST_CODE && resultCode == RESULT_OK) {
ArrayList<Image> images = data.getParcelableArrayListExtra(Constants.INTENT_EXTRA_IMAGES);
Uri uri = Uri.parse(String.valueOf(images));
storageRef = storage.getReference("photos");
final StorageReference photoRef = storageRef.child(uri.getLastPathSegment());
photoRef.putFile(uri)
.addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
String content = downloadUrl.toString();
if (content.length() > 0) {
editWriteMessage.setText("");
Message newMessage = new Message();
newMessage.text = content;
newMessage.idSender = StaticConfig.UID;
newMessage.idReceiver = roomId;
newMessage.timestamp = System.currentTimeMillis();
FirebaseDatabase.getInstance().getReference().child("message/" + roomId).push().setValue(newMessage);
}
}
});
}
Variables
onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uploaderBtn = findViewById(R.id.uploader);
chooserBtn = findViewById(R.id.chooser);
alert = findViewById(R.id.alert);
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Uploading Images please Wait.........!!!!!!");
chooserBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, PICK_IMAGE);
}
});
Uploader Button
uploaderBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
urlStrings = new ArrayList<>();
progressDialog.show();
alert.setText("If Loading Takes to long press button again");
StorageReference ImageFolder = FirebaseStorage.getInstance().getReference().child("ImageFolder");
for (upload_count = 0; upload_count < ImageList.size(); upload_count++) {
Uri IndividualImage = ImageList.get(upload_count);
final StorageReference ImageName = ImageFolder.child("Images" + IndividualImage.getLastPathSegment());
ImageName.putFile(IndividualImage).addOnSuccessListener(
new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
ImageName.getDownloadUrl().addOnSuccessListener(
new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
urlStrings.add(String.valueOf(uri));
if (urlStrings.size() == ImageList.size()){
storeLink(urlStrings);
}
}
}
);
}
}
);
}
}
});
}
if (urlStrings.size() == ImageList.size()){
storeLink(urlStrings);
}
Store Links To Firebase Realtime Database
private void storeLink(ArrayList<String> urlStrings) {
HashMap<String, String> hashMap = new HashMap<>();
for (int i = 0; i <urlStrings.size() ; i++) {
hashMap.put("ImgLink"+i, urlStrings.get(i));
}
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("User");
databaseReference.push().setValue(hashMap)
.addOnCompleteListener(
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(MainActivity.this, "Successfully Uplosded", Toast.LENGTH_SHORT).show();
}
}
}
).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
progressDialog.dismiss();
alert.setText("Uploaded Successfully");
uploaderBtn.setVisibility(View.GONE);
ImageList.clear();
}
onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE) {
if (resultCode == RESULT_OK) {
if (data.getClipData() != null) {
int countClipData = data.getClipData().getItemCount();
int currentImageSlect = 0;
while (currentImageSlect < countClipData) {
ImageUri = data.getClipData().getItemAt(currentImageSlect).getUri();
ImageList.add(ImageUri);
currentImageSlect = currentImageSlect + 1;
}
alert.setVisibility(View.VISIBLE);
alert.setText("You have selected" + ImageList.size() + "Images");
chooserBtn.setVisibility(View.GONE);
} else {
Toast.makeText(this, "Please Select Multiple Images", Toast.LENGTH_SHORT).show();
}
}
}
}
}
It is working fine.
if (requestCode == Constants.REQUEST_CODE && resultCode == RESULT_OK) {
ArrayList<Image> images = data.getParcelableArrayListExtra(Constants.INTENT_EXTRA_IMAGES);
Uri[] uri=new Uri[images.size()];
for (int i =0 ; i < images.size(); i++) {
uri[i] = Uri.parse("file://"+images.get(i).path);
storageRef = storage.getReference("photos");
final StorageReference ref = storageRef.child(uri[i].getLastPathSegment());
ref.putFile(uri[i])
.addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
String content = downloadUrl.toString();
if (content.length() > 0) {
editWriteMessage.setText("");
Message newMessage = new Message();
newMessage.text = content;
newMessage.idSender = StaticConfig.UID;
newMessage.idReceiver = roomId;
newMessage.timestamp = System.currentTimeMillis();
FirebaseDatabase.getInstance().getReference().child("message/" + roomId).push().setValue(newMessage);
}
}
});
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With