从 Firebase 存储中检索图像到 recyclerview

Retrieving images from Firebase storage into recyclerview

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

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

我也搜索了一下,但我看到的样本很不一样。

这是代码片段:

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);
}