【问题标题】:How to avoid duplicate data in Firebase Database如何避免 Firebase 数据库中的重复数据
【发布时间】:2016-09-18 10:17:53
【问题描述】:

在我的 Android 应用程序中,我以这种方式在 firebase 数据库中插入一个 VideoEntity 对象:

@Override
    protected void onCreate(Bundle savedInstanceState){

        Log.d(TAG, " onCreate(Bundle) - Ini ");
        super.onCreate(savedInstanceState);

        database =  FirebaseDatabase.getInstance();
        String videoId = "";

        for(VideoEntity video: videosList) {
            videoId = video.getId();
            DatabaseReference mRef =  database.getReference().child("Videos").push();
            mRef.setValue(video);
        }

这是 VideoEntity 类:

 package com.app.entities;

import android.os.Parcel;
import android.os.Parcelable;

import java.io.Serializable;

public class VideoEntity implements Parcelable{

    private String id;
    private String title;
    private String description;
    private String thumbnailURL;
    private String category;



    public VideoEntity() {

    }

    public VideoEntity(Parcel in) {
        id = in.readString();
        title = in.readString();
        description = in.readString();
        thumbnailURL = in.readString();
        category = in.readString();

    }



    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getThumbnailURL() {
        return thumbnailURL;
    }

    public void setThumbnailURL(String thumbnail) {
        this.thumbnailURL = thumbnail;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCategory() {return category;}

    public void setCategory(String category) { this.category = category;}

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(id);
        dest.writeString(title);
        dest.writeString(description);
        dest.writeString(thumbnailURL);
        dest.writeString(category);
    }

    public static final Creator<VideoEntity> CREATOR = new Creator<VideoEntity>() {
        @Override
        public VideoEntity createFromParcel(Parcel in) {
            return new VideoEntity(in);
        }

        @Override
        public VideoEntity[] newArray(int size) {
            return new VideoEntity[size];
        }
    };
}

问题是每次我开始这个活动时,数据库中都会插入相同的对象,所以我在数据库中有重复的数据。

有没有办法避免这种情况?

【问题讨论】:

  • 请详细说明您正在尝试做什么,您期望发生什么,以及究竟发生了什么不同的事情。 “插入相同的数据?”你是什​​么意思?这个“videolist”数组/对象来自哪里?
  • 我认为这与知道视频列表的来源无关,但我编辑了我的问题。

标签: android firebase firebase-realtime-database


【解决方案1】:

如果您的数据具有自然键,请将其存储在其自然键下。在您的情况下,视频有一个 id 字段,这可能已经是独一无二的了。因此,不要将视频存储在推送 ID 下,而是将它们存储在现有 ID 下:

DatabaseReference mRef =  database.getReference().child("Videos").child(video.getId());
mRef.setValue(video);

这样下次您运行该应用时,它会再次在相同位置写入相同的数据。

【讨论】:

  • 再次感谢您,这正是我想要的
  • @Frank,如果firebase中的数据集合超大怎么办?这种方法还有效吗?我的意思是,Fiirebase 性能不会受到正在保存新数据的事实的影响,但是已经有 ID 的数据会被覆盖?
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多