Masalah dalam mengambil gambar dari database firebase di android studio
Aug 17 2020
Saya sudah mencoba membuat aplikasi chatting di studio android dengan java. Saya berhasil menulis kode untuk mengupload gambar dan mentransfernya dari penyimpanan Firebase ke Firebase Database. Ketika saya mencoba mengambil gambar dengan metode picasso, tampilan gambar yang saya coba lakukan tidak terlihat.
private Button UpdateAccountSettings;
private EditText userName, userStatus;
private CircleImageView userProfileImage;
private String currentUserID;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private StorageReference UserProfileImagesRef;
private static final int GalleryPic = 1;
private ProgressDialog loadingBar;
private String photoUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
RootRef = FirebaseDatabase.getInstance().getReference();
UserProfileImagesRef = FirebaseStorage.getInstance().getReference().child("Profile Images");
InitializeFields();
userProfileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, GalleryPic);
}
});
UpdateAccountSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UpdateSetting();
}
});
RetrieveUserInfo();
}
private void InitializeFields() {
UpdateAccountSettings = (Button) findViewById(R.id.update_settings_button);
userName = (EditText) findViewById(R.id.set_user_name);
userStatus = (EditText) findViewById(R.id.set_profile_status);
userProfileImage = (CircleImageView) findViewById(R.id.set_profile_image);
loadingBar = new ProgressDialog(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==GalleryPic && resultCode==RESULT_OK && data!=null)
{
Uri ImageUri = data.getData();
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1, 1)
.start(this);
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK)
{
loadingBar.setMessage("Uploading Image");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
Uri resultUri = result.getUri();
StorageReference filepath = UserProfileImagesRef.child(currentUserID + ".jpg");
filepath.putFile(resultUri)
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>()
{
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
{
if (task.isSuccessful())
{
Toast.makeText(SettingsActivity.this, "Profile Image Saved Successfully...", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
String downloadUrl = task.getResult().getDownloadUrl().toString();
RootRef.child("Users").child(currentUserID).child("image")
.setValue(downloadUrl)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task)
{
if (task.isSuccessful())
{
loadingBar.dismiss();
}
else
{
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error : " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
else
{
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error : " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
}
}
private void UpdateSetting() {
String setUserName = userName.getText().toString();
String setStatus = userStatus.getText().toString();
if (TextUtils.isEmpty(setUserName)) {
AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this);
builder.setCancelable(true);
builder.setTitle("Error");
builder.setMessage("Please write a user name");
builder.setNegativeButton("Back", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
} else if (TextUtils.isEmpty(setStatus)) {
AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this);
builder.setCancelable(true);
builder.setTitle("Error");
builder.setMessage("Please write a Status");
builder.setNegativeButton("Back", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
} else {
HashMap<String, String> profileMap = new HashMap<>();
profileMap.put("uid", currentUserID);
profileMap.put("name", setUserName);
profileMap.put("status", setStatus);
profileMap.put("image", photoUrl);
RootRef.child("Users").child(currentUserID).setValue(profileMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
SendUserToMainActivity();
Toast.makeText(SettingsActivity.this, "Profile Updated Successfully", Toast.LENGTH_SHORT).show();
}
else
{
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error :" + message, Toast.LENGTH_SHORT).show();
}
}
;
});
}
}
private void RetrieveUserInfo()
{
RootRef.child("Users").child(currentUserID)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if((dataSnapshot.exists()) && (dataSnapshot.hasChild("name") && (dataSnapshot.hasChild("image"))))
{
String retrieveUserName = dataSnapshot.child("name").getValue().toString();
String retrieveUserStatus = dataSnapshot.child("status").getValue().toString();
String retrieveProfileImage = dataSnapshot.child("image").getValue().toString();
userName.setText(retrieveUserName);
userStatus.setText(retrieveUserStatus);
photoUrl = retrieveProfileImage;
Picasso.get().load(retrieveProfileImage).into(userProfileImage);
}
else if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("name")))
{
String retrieveUserName = dataSnapshot.child("name").getValue().toString();
String retrieveUserStatus = dataSnapshot.child("status").getValue().toString();
userName.setText(retrieveUserName);
userStatus.setText(retrieveUserStatus);
}
else
{
Toast.makeText(SettingsActivity.this, "Please Set Your Profile Info...", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
private void SendUserToMainActivity()
{
Intent mainIntent = new Intent(SettingsActivity.this, MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}
Jawaban
Nik Aug 17 2020 at 22:07
Pertama, periksa apakah URL Anda masuk ke database karena terkadang URL menghasilkan berbeda seperti jika tidak menghasilkan URI dengan benar daripada URL akan dibuat dengan cara yang berbeda
- salin jalur gambar dari database Anda dan uji di browser apakah URL itu valid atau tidak
- menggunakan lib glide. yang lebih efisien daripada Picasso
Glide.with (yourContext) .load (url) .centerCrop (). Placeholder (R.drawable.loading_spinner) .into (yourImageView)
- note centreCrop () dan placeHolder () adalah opsional Anda dapat menghapus jika Anda mau, untuk lebih https://github.com/bumptech/glide
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'