파이어베이스 안드로이드에서 특정 값에 대한 푸시된 ID 가져오기
다음과 같이 값을 눌렀을 때 Firebase에서 생성된 id를 검색하고 싶습니다.
"-KGdKiPSODz7JXzlgl9"를 검색하고 싶습니다.J" getKey()로 시도한 이메일에 대한 이 ID는 "users"를 반환하고 사용자가 값을 얻으면 ID에서 프로필 사진으로 전체 개체를 반환합니다. 그러면 앱에서 사용자 개체로 가져올 수 없습니다.
이것을 어떻게 해결합니까?
Firebase users = myFirebaseRef.child("users");
users.orderByChild("email").equalTo("z@m.com").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.getKey();
Log.d("User",dataSnapshot.getRef().toString());
Log.d("User",dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.d("User",firebaseError.getMessage() );
}
});
값을 누르지 않고 push()에서 키를 읽을 수 있습니다.나중에 해당 키를 사용하여 하위 키를 생성하고 해당 키의 값을 푸시할 수 있습니다.
// read the index key
String mGroupId = mGroupRef.push().getKey();
....
....
// create a child with index value
mGroupRef.child(mGroupId).setValue(new ChatGroup());
mGroupId
저장하려는 값을 인덱싱하는 데 사용되는 키가 들어 있습니다.
업데이트 1: 한 줄로도 얻을 수 있습니다.
String key = mDatabase.child("posts").push().getKey();
//**************************************************************//
많은 것들을 검색하고 시도한 후에 나는 그것을 하는 두 가지 방법으로 왔습니다. 1. 이 기능을 통해 게시물을 서버에 업로드할 때 첫 번째 방법은 키를 얻는 것입니다.
public void uploadPostToFirebase(Post post) {
DatabaseReference mFirebase = mFirebaseObject
.getReference(Constants.ACTIVE_POSTS_KEY)
.child(post.type);
mFirebase.push().setValue(post);
Log.d("Post Key" , mFirebase.getKey());
}
데이터베이스에서 이미 노드에 키를 푸시한 후에 키를 얻기 위해 코드에서 사용했습니다.
public void getUserKey(String email) { Query queryRef = databaseRef.child(Constants.USERS_KEY) .orderByChild(Constants.USERS_EMAIL) .equalTo(email); queryRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { //TODO auto generated } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { //TODO auto generated; } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { //TODO auto generated; } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { //TODO auto generated } @Override public void onCancelled(DatabaseError databaseError) { //TODO auto generated } }); }
Firebase 쿼리를 실행하면 여러 결과가 발생할 수 있습니다.따라서 쿼리 값을 요청하면 Firebase는 항목 목록을 반환합니다.일치하는 항목이 하나만 있더라도 하나의 항목 목록이 됩니다.
따라서 코드에서 이 목록을 처리해야 합니다.
users.orderByChild("email").equalTo("z@m.com").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
Log.d("User key", child.getKey());
Log.d("User ref", child.getRef().toString());
Log.d("User val", child.getValue().toString());
}
}
Java - Android Studio에서 항목이 DB에 기록될 때 고유한 푸시 ID를 얻을 수 있습니다...
"Firebase: Android에서 데이터 저장" 기준:푸시() 메서드에서 반환한 새 데이터에 대한 참조를 사용하여 자식의 자동 생성 키 값을 가져오거나 자식의 데이터를 설정할 수 있습니다.푸시() 참조에서 getKey()를 호출하면 자동으로 생성된 키의 값이 반환됩니다.
한 번의 푸시()로 DATA를 로드하는 대신 쓰기 시간에 참조를 가져오려면...
- push()를 사용하여 데이터베이스에 빈 레코드를 만듭니다. 반환 값은 레코드의 참조입니다.
- .getKey()를 사용하여 해당 레코드의 키를 가져옵니다.
- .setValue(DATA)를 사용하여 빈 레코드를 채웁니다.
예를 들어 보겠습니다.
FirebaseDatabase fb_db_instance = FirebaseDatabase.getInstance();
DatabaseReference db_ref_Main = fb_db_instance.getReference("string_db_Branch_Name");
hashMap_record = new HashMap<String, String>(); //some random data
hashMap_record.put("key_Item1", "string_Item1");
hashMap_record.put("key_Item2", "string_Item2");
DatabaseReference blankRecordReference = db_ref_Main ;
DatabaseReference db_ref = blankRecordReference.push(); //creates blank record in db
String str_NEW_Records_Key = db_ref.getKey(); //the UniqueID/key you seek
db_ref.setValue( hashMap_record); //sets the record
파이어베이스 URL을 사용해야 하는 ID를 얻기 위해 해결했습니다.
String uid = firebaseRef.child("users").push().getKey();
Log.i("uid", uid);
이것이 당신에게 열쇠를 줄 것입니다.KG.....
TVAC 튜토리얼(https://www.youtube.com/watch?v=cSMMWOHkP68&list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt&index=16) 을 사용하는 사용자를 위한 것입니다.
다음과 같이 onClick 방법을 사용하여 Key를 얻을 수 있습니다.
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = getRef(position).getKey();
}
});
사용자와 같은 사용자에 새 필드를 추가하기만 하면 됩니다.새 사용자 추가 ID를 만들 때 쿼리를 읽음으로써 ID를 수신할 수 있습니다.
이렇게 하고 있습니다.
String userID;// in Users
Firebase users = myFirebaseRef.child("users");
users.orderByChild("email").equalTo("z@m.com").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Users user= dataSnapshot.getChildren().iterator().next().getValue(Users.class);
Log.d("User",user.getUserID());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.d("User",firebaseError.getMessage() );
}
});
저는 이 문제에 직면했고 해결책을 찾았습니다. 다음 코드를 사용하여 해결책을 얻을 수 있습니다.
dataSnapshot.getChildren().iterator().next().getKey()
// Unity, code in C#
{
reference = FirebaseDatabase.DefaultInstance.RootReference;
string s = reference.Push().Key;
reference.Child(s).Child(Username).SetValueAsync(Username);
Debug.Log(s);
}
파이어베이스에서 고유한 Post-id를 가져오는 또 다른 옵션은 ChildAdded의 @Override 메서드 public void에 키(dataSnapshot.getKey())를 가져와 로컬로 유지하는 것입니다.
private void attachDatabaseReadListener() {
if (mTaskEventListener == null) {
mTaskEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Task friendlyMessage = dataSnapshot.getValue(Task.class);
friendlyMessage.setId(dataSnapshot.getKey());
System.out.println("friendlyMessage = " + friendlyMessage);
DummyContent.ITEMS.add(new DummyContent.DummyItem("" + DummyContent.ITEMS.size()+1,friendlyMessage.getStatus(),friendlyMessage.getSummary()));
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
public void onChildRemoved(DataSnapshot dataSnapshot) {}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
public void onCancelled(DatabaseError databaseError) {}
};
mUserDatabaseReference.addChildEventListener(mTaskEventListener); // remove it
}
}
dataSnapshot.getKey는 작업 인스턴스에서 고유한 게시 ID를 설정하며 나중에 업데이트 작업을 수행하는 데 사용할 수 있습니다.
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference1 = firebaseDatabase.getReference("users");
databaseReference1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String key = dataSnapshot1.getKey();
Log.d(TAG, "onCreate: key :" + key);
String email = dataSnapshot1.child("email").getValue(String.class);
String roomno =dataSnapshot1.child("address").getValue(String.class);
Log.d(TAG, "onDataChange: email: " + email);
Log.d(TAG, "onDataChange: address: " + address)
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
사용
mFirebaseDatabase=mFirebaseDatabase.getInstance().getReference("tablename");
Query query = mFirebaseDatabase.orderByChild("tablenme").getRef();
query.orderByChild("Id").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String id =dataSnapshot1.child("Id").getKey();
String Name = dataSnapshot1.child("Name").getValue().toString();
String lastName= dataSnapshot1.child("lastname").getValue().toString();
flatDataGets.add(Name+"-"+lastname);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(RagisterActivity.this, R.layout.support_simple_spinner_dropdown_item, DataGets);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mRegisterSpinner.setAdapter(arrayAdapter);
mRegisterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
flatName =DataGets.get(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
이름을 와 값으로 할 수 . 예 또 노 는 기 드 본 자 을 값 및 로 하 여 추 으 가 있 다 니 습 수 할 색 검 키 식 름 의 름 이 이 ▁name ▁or ▁child ▁yes ▁the 예 , ▁adding ▁as ▁by ▁retrieve 노 드 ▁node ▁its ▁main ▁can ▁value ▁you ▁partic ▁and 또 ▁a는 니 여{main_child_name}
.
유사한 작업만 수행합니다.
HashMap<String, Object> hashLcl = new HashMap<>();
hashLcl.put("admin", firebaseUser.getUid());
hashLcl.put("name", textPrm);
DatabaseReference referenceLcl = FirebaseDatabase.getInstance().getReference();
String keyLcl = referenceLcl.child("GroupChats").push().getKey();
hashLcl.put("key", keyLcl);
Task task = referenceLcl.child("GroupChats").child(keyLcl).setValue(hashLcl);
task.addOnSuccessListener(aVoid -> {
//the data is added and now we are sure to do something related
});
언급URL : https://stackoverflow.com/questions/37094631/get-the-pushed-id-for-specific-value-in-firebase-android
'programing' 카테고리의 다른 글
사전 보기 개체란 무엇입니까? (0) | 2023.06.26 |
---|---|
C/C++ 애플리케이션의 메모리 누수를 감지하기 위해 Mac OS X Mountain Lion 및 Mavericks에서 Valgrind를 대체할 방법이 있습니까? (0) | 2023.06.26 |
SQL Server 2005 데이터베이스의 모든 보기를 나열하는 SQL 쿼리 (0) | 2023.06.26 |
ORM 하위 쿼리 유형 (0) | 2023.06.26 |
깃허브에서 어떻게 두 지점을 나눌 수 있습니까? (0) | 2023.06.26 |