从Firebase存储中删除时在本地删除文件

时间:2018-06-09 19:54:30

标签: android google-cloud-platform firebase-storage delete-file

我在应用上工作,我想知道在从存储中删除文件时,是否可以在使用此应用的所有设备上删除从Firebase存储或Google云下载的文件。

由于

3 个答案:

答案 0 :(得分:0)

是的,这是可能的,但您必须存储从内部存储中提取的uri图像。此外,如果你想在背景中删除图像,你必须编写一个云功能。它必须获取令牌ID以及用户的uid。

答案 1 :(得分:0)

我现在看到我的问题不完整。

我使用FirebaseRecyclerAdapter显示数据列表,在数据中,您有时可以将名称保存在Firebase存储中。所以我在适配器中覆盖了onChildChanged方法,当从数据库中删除子节点时,在设备上的指定文件夹中搜索音频文件,如果存在则删除。该文件也会通过Firebase功能在Firebase存储中删除。

我现在正在旅行,当我回来时,我会编辑问题和你的答案。

答案 2 :(得分:0)

要解决我的问题,我已经像这样重写了FirebaseRecyclerAdapter的onChildChanged方法:

public class MyFragment extends Fragment {

    private static final String TAG = MyFragment.class.getSimpleName();

    private FirebaseRecyclerAdapter<Entry, EntryViewHolder> mAdapter = null;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ...

        // Setup adapter
        FirebaseRecyclerOptions<Entry> options = new FirebaseRecyclerOptions.Builder<Entry>()
                .setQuery(query, Entry.class)
                .build();

        // Setup adapter
        mAdapter = new FirebaseRecyclerAdapter<Entry, EntryViewHolder>(options) {

            @Override
            public EntryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                ...
                return view;
            }

            @Override
            protected void onBindViewHolder(@NonNull final EntryViewHolder viewHolder, int position, @NonNull final Entry model) {
                // Fill view holder
                ...
            }

            @Override
            public void onChildChanged(@NonNull ChangeEventType type, @NonNull DataSnapshot snapshot, int newIndex, int oldIndex) {
                super.onChildChanged(type, snapshot, newIndex, oldIndex);

                // If child is removed, deleted its associated file on device if exists
                if (type.equals(ChangeEventType.REMOVED)) {
                    // Get file name from delete entry
                    final String fileName = (String) snapshot.child("fileName").getValue();
                    // Check in file exists in local, then delete it
                    File file = new File(getActivity().getFilesDir() + "/" + fileName);
                    if (file.exists()) {
                        file.delete();
                    }
                } 
            }
        };

        // Setup recycler view
        mRecyclerView.setAdapter(mAdapter);

        return view;
    }
}

当从实时数据库中删除条目时,我使用Firebase函数删除文件。因此,该文件会在云和设备上被删除(如果已经在设备上下载了该文件)。