2017-03-03 4 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 incrementsおよびthis post on the push IDsを参照してください。

あなたの質問に既にそれらを識別するプロパティがある場合は、それをキーとして使用してください。 Firebase認証ユーザのリストを保存しているとしたら、各ユーザをuidの下に保存しておくといいでしょう。あるいは、質問テキストが一意でなければならない場合は、おそらくそれぞれの質問をそのテキストの(ハッシュされた派生した)派生物の下に格納するべきです。

+0

私は参照してください。だから次のようなことをすることができますか?ユーザーが新しい質問を入力しようとするたびに、データベース内の各キーをチェックして、前の質問と重複していないかどうかを確認したい。もし私がしないと私はdbに質問を追加しようとするので、私はそれが新しい質問の追加を拒否する代わりに、前の質問を上書きすると思うので – Freshia

+0

キーは自動的にユニークです。セキュリティルール内のデータの上書きを簡単に防ぐことができます: '' .write ":"!data.exists() "' –

関連する問題