2017-03-03 48 views
0

我是一名经验丰富的MySQL用户,但我是json和firebase的新手。我试图做一个用户可以输入数据的活动,并将其保存到我的数据库的Firebase中。我达到了我的目标,但这是问题所在。当我保存它(我想)我需要指定一个字符串的子元素。由于此子元素是静态的,因此每次用户输入问题时都会覆盖数据库中现有的问题。我该如何解决这个问题,以及如何获取数据?这是我的代码的一部分。每次用户在Firebase中按下按钮时如何存储数据(Android)

private FirebaseAuth firebaseAuth; 
    private DatabaseReference databaseReference; 


firebaseAuth=FirebaseAuth.getInstance(); 
     if(firebaseAuth.getCurrentUser()==null){ 
      finish(); 
      startActivity(new Intent(this,LoginActivity.class)); 
     } 
     FirebaseUser user=firebaseAuth.getCurrentUser(); 
     databaseReference= FirebaseDatabase.getInstance().getReference(); 


Info info=new Info(question,answer,a,b,c,d); 
       databaseReference.child("secondQuestion").setValue(info); 
//info is a new object which takes 6 string as an input. 
    // As you can see, I declare a string inside .child and it overwrites the data stored in it 
+1

您可能希望将问题存储在类似列表的结构中:https://firebase.google.com/docs/database/android/lists-of-data。使用'push'会为您的问题生成一个唯一的ID,您可能需要将其保存到某处以供稍后检索。 –

回答

0

安德鲁评论说,这的确是正常的项目添加到使用push一(半按时间顺序)列表。

它们在逻辑上与MySQL中的自动增量字段类似,但是具有(非常)不同的格式。请参阅this post about why Firebase doesn't use the +1 style incrementsthis post on the push IDs

如果你的问题已经有一个唯一标识它们的属性,你应该使用它作为关键。因此,假设您正在存储Firebase身份验证用户列表,则应将每个用户存储在uid之下。或者如果问题文本必须是唯一的,那么您应该将每个问题存储在其文本的哈希衍生物下。

+0

我明白了。所以我可以做类似以下的事情吗?每当用户尝试输入一个新问题时,我想检查我的数据库中的每个密钥以查看它是否与上一个问题重复。因为如果我不这样做,并且我试图将问题添加到db,我认为它会覆盖上一个问题,而不是拒绝添加新问题 – Freshia

+0

键自动唯一。另一方面,值不是。您可以轻松防止在安全规则中覆盖数据:'“.write”:“!data.exists()” –

相关问题