如果我手动输入图像的位置,今天终于可以在今天早些时候在屏幕上显示并更新图像。我想知道是否有系统地执行此操作?因此,所有图像都不都是相同的图片。我希望他们能够在自己的设备上上传它们,因此使用一个随机名称上传它们。但是我不确定如何保存这些名称以将其下载回应用程序。我觉得好像一系列的数组可以用于存储用户ID和发布ID。但是我希望有一个火力地堡方法来做到这一点。
我尝试将随机名称保存在字符串中,但是它再次始终如一地下载相同的图片。我尝试使用.getDownloadUri()。toString()方法,但是使用这些方法时,很难将其显示在带有图片的屏幕上。
public void setBlogImage(String downloadUri, String thumbUri){
profileImageReference = FirebaseStorage.getInstance().getReference("post_images");
profileImageReference = profileImageReference.child("8c760627-1660-4977-83f2-838d23bedd28.jpg");
blogImageView = mView.findViewById(R.id.blog_image);
GlideApp.with(context).load(profileImageReference).into(blogImageView);
}
UploadTask filePath = storageReference.child("post_images").child(randomName + ".jpg").putBytes(imageData);
filePath.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task) {
final String downloadUri = task.getResult().getMetadata().getReference().getDownloadUrl().toString();
if(task.isSuccessful()){
File newThumbFile = new File(postImageUri.getPath());
try {
compressedImageFile = new Compressor(NewPostActivity.this)
.setMaxHeight(100)
.setMaxWidth(100)
.setQuality(1)
.compressToBitmap(newThumbFile);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
compressedImageFile.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] thumbData = baos.toByteArray();
UploadTask uploadTask = storageReference.child("post_images/thumbs")
.child(randomName + ".jpg").putBytes(thumbData);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> uriTask = task.getResult().getStorage().getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
String downloadUri = storageReference.getDownloadUrl().toString();
}
});
Map<String, Object> postMap = new HashMap<>();
postMap.put("image_url", downloadUri);
postMap.put("image_thumb", downloadUrl);
postMap.put("desc", desc);
postMap.put("user_id", current_user_id);
postMap.put("timestamp", FieldValue.serverTimestamp());
firebaseFirestore.collection("Posts").add(postMap).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
@Override
public void onComplete(@NonNull Task<DocumentReference> task) {
if(task.isSuccessful()){
Toast.makeText(NewPostActivity.this, "Post was added", Toast.LENGTH_LONG).show();
Intent mainIntent = new Intent(NewPostActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
} else {
}
newPostProgress.setVisibility(View.INVISIBLE);
}
});
我期望它传递downloadUrl字符串,但是当我这样做时,我得到一个空白的imageView,并且我尝试将子级设置为downloadUri字符串,而不是当前那里的手册。