удаление файла локально при удалении из хранилища Firebase - PullRequest
0 голосов
/ 09 июня 2018

Я работаю над приложением и хочу узнать, можно ли удалить файл, загруженный из Firebase Storage или Google cloud, на все устройства, использующие это приложение, когда файл удаляется из хранилища.

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 июня 2018

Теперь я вижу, что мой вопрос был неполным.

Я использую FirebaseRecyclerAdapter для отображения списка данных, и в данных иногда можно сохранить имя аудиофайла, сохраненного в Firebase Storage.Поэтому я переопределил метод onChildChanged в адаптере, и когда дочерний элемент удаляется из базы данных, аудиофайл ищется в указанной папке на устройстве и удаляется, если существует.Файл также удаляется в Firebase Storage через функцию Firebase.

Сейчас я путешествую, когда вернусь, я отредактирую вопрос и ваш ответ.

0 голосов
/ 22 июня 2018

Чтобы решить мою проблему, я переопределил onChildChanged метод FirebaseRecyclerAdapter следующим образом:

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, чтобы удалить файл, когда запись удаляется из базы данных реального времени.Таким образом, файл удаляется в облаке и на устройстве (если он уже был загружен на устройство).

0 голосов
/ 09 июня 2018

Да, это возможно, но вы должны сохранить URI изображения, извлеченного из внутреннего хранилища.Также, если вы хотите, чтобы изображение было удалено в фоновом режиме, вы должны написать облачную функцию.Он должен получить идентификатор токена и идентификатор пользователя.

...