2016-09-16 1 views
3

안드로이드 중포 기지 데이터베이스에서 새 데이터를 작성하고 매번 사용자는 내가 다음 무엇을 내가 뭐하는 거지 이러한 목적을 위해 데이터베이스에 어떤 값을 저장 registred입니다 :나는 안드로이드 응용 프로그램에서 중포 기지의 데이터베이스를 사용하고

database = FirebaseDatabase.getInstance(); 
          DatabaseReference mRef = database.getReference().child("Users").push(); 
          FirebaseUser user = mAuth.getCurrentUser(); 
          String userId = user.getUid(); 
          mRef.child("User").child("age").setValue(selectedAge); 
          mRef.child("User").child("gender").setValue(finalGender); 
          mRef.child("User").child("userId").setValue(userId); 
          mRef.child("User").child("username").setValue(username); 

하지만를 내가 내 firebase 콘솔에 갈 때 나는 당신이 이미지에서 볼 수 있듯이 내가 필요로하지 않는 automaticaly 생성 된 id의 종류가 내 자신의 id를 설정하는 것을 보았다.

enter image description here

이를 방지하고 이미지에서 두 번째로 사용자 노드와 같은 노드를 만들 수있는 방법이 있나요?

NOTE이 행

DatabaseReference mRef = database.getReference().child("Users").push(); 

: 제 2 사용자 노드 i가 수동으로 실시

답변

2

내가 제안하려는 변화이다. Firebase가 Java 클래스를 사용하여 데이터베이스를 읽고 쓰는 기능을 이용하면 작업을 훨씬 쉽게 할 수 있습니다. 당신이 그렇게처럼 쓰기 작업을 업데이트 할 수 있습니다 데이터베이스에 작성하는 자바 클래스를 사용하여

public class User { 

    public double age; 
    public String gender; 
    public String userName; 

    //required default constructor 
    public User() { 
    } 

    public User(double age, String gender, String userName) { 
     this.age = age; 
     this.gender = gender; 
     this.userName = userName; 
    } 

    public double getAge() { 
     return age; 
    } 

    public void setAge(double age) { 
     this.age = age; 
    } 

    public String getGender() { 
     return gender; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
} 

: 예를 들어, 당신은 다음과 같이 프로젝트에 User 클래스를 추가

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
FirebaseUser user = mAuth.getCurrentUser(); 
String userId = user.getUid(); 
User user = new User(26, "M", "user001"); 
DatabaseReference mRef = database.getReference().child("Users").child(userId); 
mRef.setValue(user); 

공지 사항이 Java 오브젝트의 상점 사용자 uid에 대한 필드가 없습니다. 이것은 당신에게 달려 있지만 두 가지 이유로 그것을 포함하지 않았습니다. 첫째, 데이터베이스에서 사용자의 uid을 키로 사용하여 고유 한 위치에 데이터를 저장합니다. 둘째, Firebase 인증을 사용하고 있기 때문에 앱에서 현재 로그인 한 사용자의 ID를 가져와야하는 경우 FirebaseAuth을 통해 액세스 할 수 있습니다.

+0

대단히 감사합니다 : DatabaseReference mRef = database.getReference(). child ("Users"). child (userID); 나는 당신이 userId 맞습니까? 왜냐하면 userID가 선언 된 위치를 볼 수 없기 때문입니다. – rainman

+0

예, 맞습니다. "userId"여야합니다. –

+0

감사합니다. 여기에 다른 문제가 있습니다. http://stackoverflow.com/questions/39550149/check-if-user-is-authtificated-for-first-time -in-firebase-google-authentificatio, 만약 당신이 어떤 생각을 가질 수있다 – rainman

0

것만이 라인 변경을 추가

DatabaseReference mRef = database.getReference().child("Users"); 

푸시()는 자동으로 고유 추가 키.

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
FirebaseUser user = mAuth.getCurrentUser(); 
String userId = user.getUid(); 
DatabaseReference mRef = database.getReference().child("Users").child(userId); 
mRef.child("age").setValue(selectedAge); 
mRef.child("gender").setValue(finalGender); 
mRef.child("username").setValue(username); 

나는 당신이 당신의 데이터베이스에 저장하기 원하는 사용자 데이터를 표현하는 자바 클래스를 만드는 것이도를 건의 할 것입니다 : 바로 여기에 귀하의 질문에 대답하려면

+0

내가 변경하면 새로운 사용자 노드가 만들어져 기존 노드를 덮어 씁니다. – rainman

+1

코드가 작성되면 매번 사용자 -> 사용자에게 자녀 정보를 작성하도록 Firebase에 알리고 있기 때문에 이는 의미가 있습니다. 케빈 오닐 (Kevin O'Neil)의 대답을 살펴보고 그런 식으로 구현해보십시오. –

관련 문제