【问题标题】:How to download a file from Firebase RealtimeDatabase that is saved in the FirebaseStorage using the file location link?如何使用文件位置链接从 Firebase 实时数据库下载保存在 Firebase 存储中的文件?
【发布时间】:2020-06-13 22:56:54
【问题描述】:

我正在制作一个在线学习管理系统应用程序。我已经为课程创建了一个表格,并且讲座幻灯片就在那个表格中。管理员可以将讲座幻灯片上传到数据库,用户应该可以通过 LessonsActivity 下载它们。当管理员上传演讲幻灯片时,文件被保存在 FirebaseStorage 中,文件位置(文件路径)被保存在数据库的课程表中。我想让用户进入他们喜欢的任何主题,并使用我在该活动的布局文件中分配的按钮下载课程(使用保存在数据库中的文件路径。不使用 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

【问题讨论】:

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


【解决方案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 ) {}

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多