2016-10-13 11 views
2

私はFirebase AndroidアプリにDatabaseReferenceを使って新しい子を追加しようとしています。私がやっている:Firebaseデータベースに新しい子を追加する方法

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() 
mDatabase.child("childToAdd").setValue(1); 

それがない場合、それはデータベースに子を追加すると、私は定期的にFirebaseリファレンスでこれを行うことができます。
DatabaseReferenceでどうすればいいですか?

編集:すべての提案をいただきありがとうございますが、次のコードに問題があります。 ifブロックに入ると、データをデータベースにプッシュしません。

https://gist.github.com/rounaksalim95/a5cba332400c6caf8320f15b0cbf06e8

私は古いFirebase参照して、これをしようとすると、私は、エラーコード11(firebase実行ループから呼び出されるユーザコード)を取得し、新しいデータベースを参照して、私は、エラーコードを取得-3(PermissionDeniedノー持っているにもかかわらずセキュリティルール)。

更新:

私はそれは私が単一の値のイベントリスナーを使用するように望んで行うようになった:

Firebase userRef = new Firebase(BASEURL + "userData"); 

userRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.child(user.getUid()).getValue() == null) { 
      userRef.child(user.getUid()).setValue(1); 
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 

ただし、データベースの参照は、私はこのような値を追加することはできません。

+0

私はあなたの質問に間違いがあるかもしれませんが、 'mDatabase'は' DatabaseReference'ではありませんか? 'getReference()'メソッドは 'DatabaseReference'を返します –

答えて

11

あなたは、新しいデータの一意のキーを生成するpush()を呼び出す必要があります:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() 
mDatabase.push().setValue(1); 

これは、リストの最後に新しい値を追加します。 push()child()方法を組み合わせることにより

は、データベース内の子どもの複数のリストを作成できます。

mDatabase.child("numbers").push().setValue(1); 
mDatabase.child("numbers").push().setValue(53); 
mDatabase.child("numbers").push().setValue(42); 

mDatabase.child("letters").push().setValue("a"); 
mDatabase.child("letters").push().setValue("z"); 
mDatabase.child("letters").push().setValue("c"); 

がFirebaseのドキュメントでセクション append to a list of dataを参照してください。

+1

提案に感謝します!しかし、トランザクションがデータベース内の値を更新していないように見えるので、私はそれ以上の問題を抱えています。 – Ron7

+0

@Frank van Puffelen Firebaseデータベースに入れ子の子を追加するにはどうしたらいいですか? –

0

次のコードでは、データベースに名前deepakの子を追加してから、名前リストを持つリストを保持する子をもう一度追加します。あなたのコードでは、データベースに子を追加する方法を既に知っていると思いますが、ちょっと混乱しています。

private DatabaseReference childRef; 
private DatabaseReference listRef; 

databaseReference = FirebaseDatabase.getInstance().getReference(); 
childRef = databaseReference.child("deepak"); 
listRef = childRef.child("list"); 
listRef.setValue(callList); 
0

このサンプルを確認すると、役立つことがあります。

 public class FirebaseUserDetails 
    { 
    private String mDisplayName; 
    public String getmDisplayName() { 
     return mDisplayName; 
    } 
public void setmDisplayName(String mDisplayName) { 
    this.mDisplayName = mDisplayName; 
} 
} 

場合は、データベースに何かを追加することはできません、firebaseデータベースにあなたの価値を追加

FirebaseUserDetails firebaseUserDetails = new FirebaseUserDetails(); 
firebaseUserDetails.setmDisplayName("arunwin"); 
DatabaseReference pathReference = FirebaseDatabase.getInstance().getReference().child("contacts"); 
pathReference.child("arun").setValue(firebaseUserDetails).addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 

    } 
}); 

そして、あなたの結果の値は、以下のようなデータベースに

contacts: 
    arun: 
     mDisplayName:"arunwin" 
0

を追加されますあなたは許可されていません。firebaseコンソールでのルール]タブには、この設定のどちらか

{ 
"rules": { 
".read": true, 
".write": true 
} 
} 

それとも、最初の認証を作成する(メール/パスを試してください)と

でユーザーを作成する必要がありますが、次のいずれかを実行することができます
createUserWithEmailAndPassword(email, password) 

し、その後でログイン:

signInWithEmailAndPassword(email, password) 

、あなたはサインインのwiを有効にする必要がありますあなたのコンソールにメールを送ります。

そして、データベースにデータを書き込むことができます。

+0

答えをありがとう。ただし、認証ルールは設定されておらず、ユーザーは正式にサインインされています。これはコードブロックで使用しているユーザーオブジェクトです。 – Ron7

+0

あなたはpush()を使ってそれを行うことができますか? –

+0

または、mDatabase.child( "childToAdd")を試してください。setValue( "1"); –

2

もう一つの柱は、次のようにあなたがFirebaseの最新バージョンを持っていることを確認するためにあなたのGradleアプリのファイルをチェックするために言及した:

compile 'com.google.firebase:firebase-core:10.0.1' 
compile 'com.google.firebase:firebase-database:10.0.1' 

私は、これは古いバージョンを使用してから発生する可能性が多くの問題を解決すべきだと思います。

こちらがお役に立てば幸いです。

1

push()を火力基地に設定する前に使用してください。データベースに値を送信するたびに、新しいユーザーが作成されます。

関連する問題