如何使用文件位置链接从Firebase RealtimeDatabase下载保存在FirebaseStorage中的文件?

时间:2020-03-01 13:05:53

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

我正在制作一个在线学习管理系统应用程序。我为“课程”创建了一个表格,该表格中有演讲幻灯片。管理员可以将讲义幻灯片上传到数据库中,用户应该可以通过LessonsActivity下载它们。管理员上传演讲幻灯片时,文件将保存在FirebaseStorage上,文件位置(文件路径)将保存在数据库的Lessons表中。我想让用户进入他们喜欢的任何主题,然后使用我在该活动的布局文件中分配的按钮下载课程(使用保存在数据库中的文件路径。不使用FirebaseStorage参考)。

我观看了一个视频并尝试使用DownloadManager功能,但它仅显示直接从FirebaseStorage下载文件。

protected void onStart() {
    super.onStart();

    FirebaseRecyclerOptions<Lessons> options =
            new  FirebaseRecyclerOptions.Builder<Lessons>()
                    .setQuery(LessonsRef.orderByChild("subject_id").equalTo(subject_id), Lessons.class)
                    .build();

    FirebaseRecyclerAdapter<Lessons, LessonsViewHolder> adapter =
            new FirebaseRecyclerAdapter<Lessons, LessonsViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull LessonsViewHolder holder, int position, @NonNull final Lessons model)
                {

                        holder.lname.setText(model.getName());
                        downloadBtn.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                //download();
                            }

                        });

                }


                @NonNull
                @Override
                public LessonsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
                {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.lessons_layout, parent, false);
                    LessonsViewHolder holder = new LessonsViewHolder(view);
                    return holder;
                }
            };

    recyclerView.setAdapter(adapter);
    adapter.startListening();
    GridLayoutManager mGridLayoutManager = new GridLayoutManager(LessonsActivity.this, 1);
    recyclerView.setLayoutManager(mGridLayoutManager);
}

这是我的Database Structure

1 个答案:

答案 0 :(得分:1)

try {
    final File localFile = File.createTempFile("images", "jpg");
    storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
            Bitmap bitmap = BitmapFactory.decodeFile(localFile.getAbsolutePath());
            mImageView.setImageBitmap(bitmap);

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
        }
    });
} catch (IOException e ) {}