java - 使用 Firebase 数据库填充 RecyclerView

标签 java android firebase firebase-realtime-database

晚上好。

我有一个测试代码,我想在其中填充一个具有 ImageView 的 RecycleView。 ImageView 将填充来自 Firebase 数据库中 URL 的 JPG 图片。

问题是我不知道如何检索数据和填充 recycleview 我正在阅读 Github 上的 FirebaseUI,但我真诚地发现它有点困难,因为我独自一人在这个应用程序中。

这是 MainActivity 代码:

public class MainActivity extends AppCompatActivity{


    DatabaseReference mReference;
    DatabaseReference mURLReference;

    public FirebaseRecyclerAdapter<Pictures, PicturesHolder> mRecyclerViewAdapter;
    //UI
    RecyclerView mImagesRV;
    LinearLayoutManager mManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        mReference = FirebaseDatabase.getInstance().getReference();
        mURLReference= mReference.child("Pictures Data");

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        mImagesRV=(RecyclerView)findViewById(R.id.recyclerView);

        mManager=new LinearLayoutManager(this);
        mManager.setReverseLayout(false);

        mImagesRV.setHasFixedSize(false);
        mImagesRV.setLayoutManager(mManager);

    }

    public void onAttachRecyclerView()
    {

        Query lastHundred = mURLReference.limitToLast(100);
        mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Pictures, PicturesHolder>(
                Pictures.class,R.layout.content_main,PicturesHolder.class, lastHundred
        ) {
            @Override
            protected void populateViewHolder(PicturesHolder pictureView, Pictures pictures, int position) {


            }
        };
    }
}

这是我用来在 FirebaseDatabase 中插入数据的对象(我只想要 URL):

public class Pictures {


    String pictureID;
    String downloadURL;
    double latitude;
    double longitude;

    public Pictures() {

    }

    public void setPictureID(String pictureID) {
        this.pictureID = pictureID;
    }

    public void setDownloadURL(String downloadURL) {
        this.downloadURL = downloadURL;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public String getPictureID() {
        return pictureID;
    }

    public String getDownloadURL() {
        return downloadURL;
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }
}

还有就是这个ViewHolder,不知道行不行。。

public class PicturesHolder extends RecyclerView.ViewHolder {

    ImageView imageView;

    public PicturesHolder(View itemView)
    {
        super(itemView);
        imageView = (ImageView) itemView.findViewById(R.id.picture_view);

    }

    public void setImageView(ImageView imageView) {
        this.imageView = imageView;
    }
}

很高兴收到你们的好建议! 非常感谢。

最佳答案

我正在使用 Glide 在我的 RecyclerView 中填充图像。给定一个作为 HTTP URL 的字符串,Glide 将解析该字符串并在您的 ImageView 中显示位于该 HTTP 地址的图像。

这是 Glide 的链接:https://github.com/bumptech/glide

您需要在您的 build.gradle 中包含 Glide:

compile 'com.github.bumptech.glide:glide:3.7.0'

在 ViewHolder 中创建一个使用 Glide 设置图像的方法 setImage():

public static class PicturesHolder extends RecyclerView.ViewHolder {
    Context ctx;
    ImageView image;

    public PicturesHolder(View v) {
        super(v);
        this.ctx = v.getContext();
        this.image = (ImageView) v.findViewById(R.id.myImageView);
    }

    public void setImage(String url) {
        Glide.with(ctx)
                .load(url)
                .into(image);
    }
}

然后在 populateViewHolder 中,您将从您的 viewholder 调用 setImage() 方法,并将来自您的 Pictures 模型的 getDownloadURL() 的返回值作为参数传递:

@Override
    protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, int position) {
        viewHolder.setImage(model.getDownloadURL());
}

关于java - 使用 Firebase 数据库填充 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40956090/

相关文章:

java - 谷歌指南 : Request Parameter gets lost when forwarding from servlet to servlet

java - 将多个字符串写入文件而不删除浏览器的第一个 ANDROID Collection 夹

ios - Firebase 多位置更新最佳实践(包括示例)ios

javascript - 在 Firestore 中,如何查询在某个日期范围内创建的项目并按不同字段排序?

ios - Firestore 仍然会覆盖我的数据吗?

java - 排序字符串数组

java jasypt 突然崩溃

java - 方法和类困惑

android - 调用子 fragment 时找不到 id 的 View

java - Android:OpenGL ES:无法处理太宽的纹理?