I'am trying to code an application that you can post some photos and texts. I'm okey with getting texts from firebase database however ı cannot access the images that is stored in Storage part of the Firebase (I also added them into database). Images couldn't be loaded and when I checked the logcat, Picasso says that
Unrecognized type of request: Request{com.google.android.gms.tasks.zzu@78d7d49}
So i cannot give the download url of the image because images are stored in database as a string like com.google.android.gms.tasks.zzu@78d7d49
How can I access them ?
public static class BlogViewHolder extends RecyclerView.ViewHolder {
View mView;
public BlogViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
public void setTitle(String title) {
TextView post_title = (TextView) mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc) {
TextView post_text = (TextView) mView.findViewById(R.id.post_text);
post_text.setText(desc);
}
public void setImage(Context ctx, String image) {
final ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
// Glide.with(ctx).load(image).into(post_image);
Picasso.get().setLoggingEnabled(true);
Picasso.get().load(image).into(post_image);
// StorageReference load = FirebaseStorage.getInstance().getReference().child("Images").child(image);
// load.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
// @Override
// public void onSuccess(Uri uri) {
// Picasso.get().load(uri.toString()).into(post_image);
// }
// });
}
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<Images> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Images>()
.setQuery(mData, Images.class)
.build();
FirebaseRecyclerAdapter<Images, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Images, BlogViewHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull BlogViewHolder blogViewHolder, int i, @NonNull Images blog) {
blogViewHolder.setTitle(blog.getTitle());
blogViewHolder.setDesc(blog.getDesc());
blogViewHolder.setImage(getApplicationContext(), blog.getImage());
}
@NonNull
@Override
public BlogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.blog_row, parent, false);
return new BlogViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
mMainList.setAdapter(firebaseRecyclerAdapter);
}
public class Images {
private String desc;
private String image;
private String title;
public Images(String desc, String image, String title) {
this.desc = desc;
this.image = image;
this.title = title;
}
public Images() {
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Make sure that your image is url format like this "https://firebasestorage.googleapis.com/v0/b/burnab-812eb.appspot.com/o/users%2Fprofile_images%2Fzyp599FGT5NJvTSC0YbKJJRWjqX2.jpg?alt=media&token=8b7a1399-9217-40dd-8a05-49f9b7b7420f"
This way Picasso will able to fetch the image from database.
If you don't have a download url from storage. Then you can achieve this below
final StorageReference childRef = storageReference.child("posts/" + user_id + "/" + ts + ".jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
compressedImageFile.compress(Bitmap.CompressFormat.JPEG, 18, baos);
byte[] thumbData = baos.toByteArray();
final UploadTask thumb_uploadTask = thumb_childRef.putBytes(thumbData);
thumb_uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Task<Uri> thumb_uriTask = thumb_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();
}
return thumb_childRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
final String mUri = downloadUri.toString();
final HashMap<Object, Object> dataMap = new HashMap<>();
dataMap.put("profile_image", profile_image);
if (bundle != null) {
group_id = bundle.getString("group_id");
dataMap.put("group_id", group_id);
mDatabase.child("group").child(group_id).child("posts").push().setValue(dataMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
pd.dismiss();
Toast.makeText(getApplicationContext(), "Post added successfully", Toast.LENGTH_LONG).show();
onBackPressed();
}
}
});
}
}
});
}
}
});