#android #firebase #android-studio
#Android #firebase #android-studio
Вопрос:
привет всем, я создаю приложение, которое использует FirebaseDatabase для информации о пользователях и firebaseStorage для сохранения изображения, и я хочу указать путь к изображению, загруженному в firebaseStorage в FirebaseDatabase в разделе Информация о пользователе, чтобы я мог отображать изображение как фотографию профиля, поэтому я использую это для загрузки изображения и MainActivity для отображения изображения. я ищу решение и получил его, но оно не сработало, или я не знал, как заставить его работать. я новичок в Android
загрузить изображение
public String getExtension(Uri uri) {
ContentResolver contentResolver = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getMimeTypeFromExtension(contentResolver.getType(uri));
}
private void uploadImage() {
StorageReference reference = mStorage.child(System.currentTimeMillis() "." getExtension(imageUri));
uploadTask= reference.putFile(imageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// Get a URL to the uploaded content
// Uri downloadUrl = taskSnapshot.getDownloadUrl();
Toast.makeText(AddImageActivity.this,"Image Uploaded",Toast.LENGTH_SHORT).show();
Intent ii = new Intent(AddImageActivity.this,MainActivity.class);
startActivity(ii);
finish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
// ...
}
});
}
MainActvity
public class MainActivity extends AppCompatActivity {
ImageView profilePic ;
TextView nameProfile ;
DatabaseReference databaseReference ;
FirebaseUser fUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
profilePic=findViewById(R.id.imageProfile);
nameProfile = findViewById(R.id.nameProfile);
fUser=FirebaseAuth.getInstance().getCurrentUser();
databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(fUser.getUid());
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
User user = snapshot.getValue(User.class);
nameProfile.setText(user.getName());
Glide.with(getApplicationContext()).load(user.getImageURL()).into(profilePic);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
Ответ №1:
это работает для меня
final StorageReference reference = mStorageReference.child(System.currentTimeMillis() "." getExtension(imageUri));
reference.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getStorage().getDownloadUrl()
.addOnSuccessListener(
new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();
}
}
);
}
});
Ответ №2:
public void uploadfile(){
if(uri!=null){
final StorageReference filereference=storageReference.child(System.currentTimeMillis() "." getFileExtension(uri));
filereference.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
filereference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Upload upload=new Upload(editText1.getText().toString(),uri.toString());
String str=databaseReference.push().getKey();
databaseReference.child(str).setValue(upload);
progressBar.setVisibility(View.INVISIBLE);
progressBar2.setVisibility(View.VISIBLE);
final Timer timer=new Timer();
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
counter ;
progressBar2.setProgress(counter);
if (counter==100){
toast.show();
progressBar2.setVisibility(View.INVISIBLE);
counter=0;
timer.cancel();
}
}
};timer.schedule(timerTask,1,15);
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
else {
Toast.makeText(this, "No file selected", Toast.LENGTH_SHORT).show();
}
}
Комментарии:
1. Моему другу нужен только ответ о том, как получить изображение итак, я предлагаю не писать для него лишнюю строку, потому что, возможно, он сейчас и может быть смущен, увидев ваш код, но поскольку вы написали идеальный код, но, основываясь на его вопросе, ему не нужен индикатор выполнения или что-то еще, поэтому в следующий раз сделайте свой ответ как можно более простым
Ответ №3:
Привет, мой друг, пожалуйста, скопируйте и вставьте вашу функцию следующим образом
private void uploadImage() {
StorageReference reference = mStorage.child(System.currentTimeMillis() "." getExtension(imageUri));
uploadTask= reference.putFile(imageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String uploadedImageUrl = uri.toString();
// Now you have your image in (uploadedImageUrl) variable so write your code to upload in firebaseDatabase and enjoy
}
});
Toast.makeText(AddImageActivity.this,"Image Uploaded",Toast.LENGTH_SHORT).show();
Intent ii = new Intent(AddImageActivity.this,MainActivity.class);
startActivity(ii);
finish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
// ...
}
});
}
Комментарии:
1. привет, спасибо за ваш комментарий, я скопировал его и вставил, и я получаю сообщение об ошибке в getDownloadUrl (), в котором говорится, что не удается разрешить метод «getDownloadUrl ()» в «StorageTask», есть идеи?
2. да, я изменил задачу обновления со ссылкой, пожалуйста, скопируйте и вставьте еще раз, это определенно сработает