2016-10-13 3 views
2

Firebase Android 앱에 DatabaseReference을 사용하여 새 하위를 추가하려고합니다. 내가하고 있어요 : 그것은 존재하지 않는 경우는 데이터베이스에 아이를 추가하는 것처럼 나는 일반 Firebase 참조하여이 작업을 수행 할 수Firebase 데이터베이스에 새 하위 항목을 추가하는 방법 Android

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

.
DatabaseReference으로 어떻게해야합니까?

편집 : 모든 제안 주셔서 감사하지만 다음 코드에 문제가 있습니다. if 블록에 들어가면 데이터를 데이터베이스로 푸시하지 않습니다. 나는 이전 중포 기지를 참조하여이 때

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

I 오류 코드 11 (중포 기지 runloop에서 호출 사용자 코드)를 얻고 새 데이터베이스를 참조하여 나는 에러 코드를 얻을 -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"); 

는 중포 기지 설명서의 섹션 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; 
} 
} 

contacts: 
    arun: 
     mDisplayName:"arunwin" 
0

당신은 데이터베이스 경우에 아무것도를 추가 할 수 없습니다, 중포 기지 데이터베이스에

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) { 

    } 
}); 

당신의 가치를 추가하고 결과 값은 다음과 같은 데이터베이스에 추가 될 예정입니다 너는 권한이 없다.

하나는 중포 기지 콘솔에서 규칙 탭으로 설정 : 당신은 다음 중 하나를 수행 할 수 먼저 인증을 작성해야합니다

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

또는이 (/ 이메일을 시도 패스)와

와 사용자를 생성
createUserWithEmailAndPassword(email, password) 

다음으로 로그인 :

signInWithEmailAndPassword(email, password) 

당신은 로그인 위스콘신 활성화해야 전자 메일/콘솔로 전달할 수 있습니다.

그리고 데이터베이스에 데이터를 쓸 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그러나 인증 규칙이 설정되어 있지 않아 사용자가 로그인 한 상태입니다. 그 코드 블록에서 사용하고있는 사용자 객체입니다. – Ron7

+0

당신은 push()를 사용하여 그것을 할 수 있습니까 ?? –

+0

또는 mDatabase.child ("childToAdd")를 시도하십시오. setValue ("1"); –

2

다음과 같이 당신이 중포 기지의 최신 버전을 확인하기 위해 Gradle을 응용 프로그램 파일을 확인하기 위해 언급 한 또 다른 게시물 :

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

내가이 이전 버전을 사용에서 발생할 수있는 많은 문제를 해결해야한다고 생각.

이 정보가 도움이되기를 바랍니다.

1

firebase에 설정된 값보다 push()을 먼저 사용하십시오. 데이터베이스에 가치를 보낼 때마다 새로운 사용자가 생성됩니다.

관련 문제