android - 将图像从 Firebase 存储检索到 recyclerview

标签 android firebase firebase-realtime-database firebase-storage

如何使用 Picasso 在我的 Firebase 存储中获取图像的 URL 来检索图像,以便将其加载到 recyclerview 容器中。我在毕加索看到了这个,但我不知道如何实现它。

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(aImage);

我也搜索过,但我看到的样本有很大不同。

下面是代码 fragment :

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;
import .......

public class FragSearch extends Fragment {

RecyclerView mRecyclerView;
private DatabaseReference mDatabaseReference;
private LinearLayoutManager mLinearLayoutManager;

private StorageReference mStorageRef;
private FirebaseRecyclerAdapter<MsgPack, MessageViewHolder> mFirebaseAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View view = inflater.inflate(R.layout.up_msg, container, false);

    mRecyclerView=(RecyclerView)view.findViewById(R.id.recycleNView);
    mRecyclerView.setHasFixedSize(false);
    mLinearLayoutManager=new LinearLayoutManager(getContext());

    return view;
}

@Override
public void onStart() {
    super.onStart();
    mStorageRef = FirebaseStorage.getInstance().getReference();
    mDatabaseReference= FirebaseDatabase.getInstance().getReference();
    mFirebaseAdapter=new FirebaseRecyclerAdapter<MsgPack, MessageViewHolder>(
            MsgPack.class,
            R.layout.post_listing,
            MessageViewHolder.class,
            mDatabaseReference.child("stackpack"))
    {

        @Override
        protected void populateViewHolder(final MessageViewHolder viewHolder, MsgPack model, int position) {

            viewHolder.bText.setText(model.getTopic());
            viewHolder.dText.setText(model.getImageurl());

        }
    };

    mRecyclerView.setAdapter(mFirebaseAdapter);
    mRecyclerView.setLayoutManager(mLinearLayoutManager);
}

@Override
public void onResume() {
    super.onResume();
}

public static class MessageViewHolder extends RecyclerView.ViewHolder{
        public TextView aText,bText,cText;
    View mView;
    LinearLayout pack;
    ImageView aImage;

    public MessageViewHolder(View v) {
        super(v);
        mView=v;


        bText = (TextView) mView.findViewById(R.id.txtTopic);
        aImage=(ImageView)mView.findViewById(R.id.imageView);

        /*How do I load retrieve the images via url in my firebase storage using picasso
       */ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(aImage);
    }
}
}

json格式

{"stackpack" : {
  "imageurl" : "http://firebase.........er23...",
  "topic" : "THANKS"
},   
}

msgPack.class

.....
public class MsgPack {

private String topic;
private String imageurl;
public MsgPack(){
}
public MsgPackString topic, String imageurl) {   
    this.topic = topic;
    this.imageurl=imageurl;

}

public String getTopic() {
    return topic;
}
public String getImageurl() {
    return imageurl;
}
public void setTopic(String topic) {
    this.topic = topic;
}
public void setImageurl(String imageurl) {
    this.imageurl = imageurl;
}
}

我只是想从实时 Firebase 中获取 imageurl(这是一个指向 Firebase 存储中的资源的字符串)值,并且我的 imageview 使用 picasso 加载该 imageurl

最佳答案

您可以在 populateViewHolder 方法上使用它。只需从 ImageView 中获取上下文即可:

@Override
protected void populateViewHolder(final MessageViewHolder viewHolder, MsgPack model, int position) {
    viewHolder.bText.setText(model.getTopic());
    viewHolder.dText.setText(model.getImageurl());
    Picasso.with(viewHolder.aImage.getContext())
           .load(model.getImageurl())
           .into(viewHolder.aImage);
}

关于android - 将图像从 Firebase 存储检索到 recyclerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43248484/

相关文章:

java - 如何在android中的BroadcastReceiver onReceive方法中调用另一个方法?

android - 自定义对话框高度以匹配内容

java - 如何检查电子邮件 ID 在 Firebase 中是否有效?

java - Android推送通知,fcm

javascript - 在 Firebase 中将捕捉值分配给变量

android - 如何使用适用于 Android 的 AWS SDK 将图像上传到 Digital Ocean Spaces?

java - 按功能更改 fragment

android - Firebase API key 限制不适用于 Android 应用程序包名称和 SHA1 指纹

javascript - Query.orderByChild 失败 : First argument was an invalid path

javascript - 在不知道前一个节点的情况下访问 Firebase 节点