我正在尝试复制messageTxt.setText(downloadUrl.toString());
代码行Link here: (one of I/O 2016 demo)。它为EditText小部件提供了与存储在firebase存储中的图像相关联的URL,并将其加载为图像。 Live demo,请在28:37播放。
对于我的情况,我打算使用firebaseui的FirebaseRecyclerAdapter将图像和其他数据(如图像描述)加载到recyclerview上。我已经将数据保存到firebase数据库中,如下图所示。如您所见,其中一个值是image_path,它将URL保存到firebase存储中的相应图像。我使用taskSnapshot.getDownloadUrl();
来获取图片网址。
但是,当我尝试使用此代码将此图像URL加载到TextView时,
public void setImage_path(String image) {
feed_image = mView.findViewById(R.id.feed_image);
feed_image.setText(image);
}
仅显示文字,我希望图像显示的位置显示为空白。我该如何解决这个问题?提前致谢!我如何实现它的完整代码如下。如果需要任何其他代码,请告诉我,例如我的模型类。
代码:
Feed Fragment
public class Feed extends Fragment {
private Button upload;
private String businessID;
private RecyclerView rv;
private DatabaseReference mDatabase;
private static StorageReference mStorage;
private FirebaseRecyclerAdapter<ImageInformation, ImageHolder> mFirebaseAdapter;
public Feed() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mStorage = FirebaseStorage.getInstance().getReference("feed_photos");
...
}
@Override
public void onStart() {
super.onStart();
mFirebaseAdapter = new FirebaseRecyclerAdapter<ImageInformation, ImageHolder>(
ImageInformation.class,
R.layout.card_item_feed,
ImageHolder.class,
mDatabase) {
@Override
public void populateViewHolder(ImageHolder holder, ImageInformation chat, int position) {
Glide.with(Feed.this).load(chat.getImage_path()).into(holder.feed_image);
holder.image_desc.setText(chat.getCaption());
holder.date.setText(chat.getDate_created());
holder.tag.setText(chat.getTags());
}
};
rv.setAdapter(mFirebaseAdapter);
}
public static class ImageHolder extends RecyclerView.ViewHolder{
ImageView feed_image;
TextView image_desc;
TextView date;
TextView tag;
public ImageHolder(View v) {
super(v);
feed_image = v.findViewById(R.id.feed_image);
image_desc = v.findViewById(R.id.image_desc);
date = v.findViewById(R.id.date);
tag = v.findViewById(R.id.tags);
}
}
}
Cardview XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="-3dp"
android:layout_marginRight="-3dp"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="0dp"
card_view:cardUseCompatPadding="false"
card_view:contentPadding="0dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/feed_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:adjustViewBounds="true"
android:visibility="visible" />
</LinearLayout>
<TextView
android:id="@+id/image_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linear_layout"/>
<TextView
android:id="@+id/date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linear_layout"/>
<TextView
android:id="@+id/tags"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linear_layout"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
编辑:我意识到我错过了我的firebase存储参考。我添加了它,但仍然卡住,因为我找不到如何检索Uri(selectedImageUri
表示演示中的uri变量)。 (参见Feed Fragment中的评论)
编辑2: - 更改了ImageHolder类 - populateViewHolder方法中更新的内容 - 更新的cardview小部件
答案 0 :(得分:0)
首先你应该
compile 'com.squareup.picasso:picasso:2.5.2'
图书馆以任何你想要的方式从firebase获取图像。
@Override
public void populateViewHolder(ImageHolder holder, ImageInformation chat, int position) {
//holder.setImage_path(chat.getImage_path());
Picasso.with(this).load(chat.getImage_path()).into(holder.feed_image);
holder.title.setText(chat.getCaption());
// holder.setCaption(chat.getCaption());
}
};
有关详细信息,请点击链接Here查看示例