![](/img/trans.png)
[英]How to get image from firebase storage with the image url that is in firestore
[英]How to get image URL from Firebase Storage in Android using Java?
我制作了一個應用程序,其中包含(姓名,年齡,描述和照片)的人員列表,但是我搜索了太多但找不到解決方案的問題。 這是AddPerson
代碼:
public class AddPersonextends AppCompatActivity {
private TextInputEditText mFirstName, mLastName, mAge, mDescription;
private String firstNameString, lastNameString, ageString, descriptionString;
private Uri imageUri = null;
CardView mInsertImage;
ImageView mImageView;
private static final int IMAGE_PICK_CODE = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_person);
mFirstName = findViewById(R.id.first_name_input);
mLastName = findViewById(R.id.last_name_input);
AboutMissingSpinner = findViewById(R.id.spinner_about_missing);
mAge = findViewById(R.id.age_input);
mDescription = findViewById(R.id.description_input);
mInsertImage = findViewById(R.id.insert_image);
mImageView = findViewById(R.id.imageView);
mInsertImage.setOnClickListener(v -> pickImageFromGallery());
}
private void pickImageFromGallery() {
Intent i = new Intent();
i.setType("image/*");
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(i, IMAGE_PICK_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode == RESULT_OK && requestCode == IMAGE_PICK_CODE) {
assert data != null;
imageUri = data.getData();
mImageView.setImageURI(data.getData());
}
super.onActivityResult(requestCode, resultCode, data);
}
private void insertPerson() {
firstNameString = Objects.requireNonNull(mFirstName.getText()).toString().trim();
lastNameString = Objects.requireNonNull(mLastName.getText()).toString().trim();
ageString = Objects.requireNonNull(mAge.getText()).toString().trim();
descriptionString = Objects.requireNonNull(mDescription.getText()).toString().trim();
if (TextUtils.isEmpty(lastNameString)) {
lastNameString = "";
}
if (TextUtils.isEmpty(firstNameString) && TextUtils.isEmpty(lastNameString)
&& TextUtils.isEmpty(ageString) && TextUtils.isEmpty(descriptionString)) {
return;
}
uploadImage();
}
private void uploadImage() {
long timestamp = System.currentTimeMillis();
String filePathAndName = "images/" + timestamp;
StorageReference storageReference = FirebaseStorage.getInstance().getReference(filePathAndName);
storageReference.putFile(imageUri)
.addOnSuccessListener(taskSnapshot -> {
Task<Uri> uriTask = taskSnapshot.getStorage().getDownloadUrl();
while (!uriTask.isSuccessful());
String uploadedImageUri = "" + uriTask.getResult();
sendList(uploadedImageUri, timestamp);
}).addOnFailureListener(e -> {
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_add_person, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_save) {
insertPerson();
finish();
return true;
} else if (item.getItemId() == android.R.id.home) {
if (TextUtils.isEmpty(firstNameString) && TextUtils.isEmpty(lastNameString)
&& TextUtils.isEmpty(ageString) && TextUtils.isEmpty(descriptionString)) {
}
showUnsavedChangesDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
private void sendList(String uploadedImageUri, long timestamp) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("List");
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("firstName", firstNameString);
hashMap.put("lastName", lastNameString);
hashMap.put("age", ageString);
hashMap.put("description", descriptionString);
hashMap.put("url", uploadedImageUri);
hashMap.put("timestamp", timestamp);
reference.push().setValue(hashMap);
}
}
正如@FrankvanPuffelen 在他的評論中提到的那樣,問題確實出在以下代碼行中:
while (!uriTask.isSuccessful());
當你添加一個;
(分號)在行尾表示 while 語句沒有人。 的確,您可以創建一個主體並在其中移動相應的代碼行,但它不會像 if 語句那樣運行。 因此,要解決此問題,您應該使用以下代碼行:
StorageReference storageReference = FirebaseStorage.getInstance().getReference(filePathAndName);
UploadTask uploadTask = storageReference.putFile(imageUri);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri uploadedImageUri = task.getResult().toString();
long timestamp = System.currentTimeMillis();
sendList(uploadedImageUri, timestamp);
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.