2017-02-21 2 views
0

내 데이터베이스의 메시지 섹션의 최상위 레코드를 가져 오려면 전자 메일 값이 사용자 전자 메일과 일치하지 않는지 확인하십시오. 그렇다면 다음 레코드를 아래로 반복하십시오. 그러나 일치하지 않는 경우 응용 프로그램에서 text 값을 '메시지 값'으로 채운 다음 데이터베이스에서 해당 레코드를 삭제하려고합니다. 나는 그것이 정상을 선택합니다 ...Firebase 데이터베이스에서 최상위 레코드를 읽으려면 어떻게해야합니까?

enter image description here

과 같이 데이터베이스에 추가

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

//setting user info in message class 
message m = new message(); 
m.setName(user.getDisplayName().toString()); 
m.setMessage(messageEdt.getText().toString()); 
m.setEmail(user.getEmail().toString()); 

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("messages").child(uniqueGeneratedMessageid); 

myRef.setValue(m); 

: 여기

데이터베이스 코드 내 쓰기의 예입니다 값이 무엇이든 상관없이 특정 ygmailcom100을 참조하지 않아도됩니다.

+0

아래 코드를 사용하지 않고 질문을 편집 할 수 있습니까? –

+0

ok 죄송합니다, 신규 여기 –

+0

그건 괜찮습니다. 이 코드를 사용하면 코드 주석을 읽는 것이 어렵습니다. –

답변

1
FirebaseDatabase database = FirebaseDatabase.getInstance().getReference(); 
Query mQuery = database.child("messages").limitToLast(1); 

편집 : 당신이 채팅 응용 프로그램에서 메시지를로드 할 것 같은

것 같습니다. 그렇다면 ValueEventListener 대신 ChildEventListener을 추가하는 것이 좋습니다. 주된 이유는 ChildEventListener이 새로 추가 된 메시지 만 반환하기 때문입니다. 여기에서 ValueEventListener은 새로 추가 된 메시지와 전체 데이터베이스 스냅 샷을 모두 새로 반환합니다. 메시지가 추가됩니다. 즉 등

위 내게 준 것과

,이 같은 ChildEventListener 구현하는 것이, 효율성, 데이터 사용, 대기 시간의 측면에서 매우 비용이 많이 드는 것 :

private final ChildEventListener mChildEventListener; 
private final Query mQuery; 
private final FirebaseDatabase database; 

database = FirebaseDatabase.getInstance().getReference(); 
mQuery = database.child("messages").limitToLast(1); 

ChildEventListener childEventListener = new ChildEventListener() { 

@Override 
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 
String value = dataSnapshot.getValue(String.class); 
} 

@Override 
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) { 
} 

@Override 
public void onChildRemoved(DataSnapshot dataSnapshot) { 

} 

@Override 
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 

} 

@Override 
public void onCancelled(DatabaseError databaseError) { 

} 

을};

mQuery.addChildEventListener(childEventListener); 
mChildEventListener = childEventListener; 

는 그런 다음 onDestroy 방법, 당신은 메모리 누수를 방지하기 위해 ChildEventListener을 제거 할 것입니다.

public void onDestroy() { 
super.onDestroy(); 
if (mChildEventListener != null) { 
    mQuery.removeEventListener(mChildEventListener); 
} 
} 
+0

이 키를 사용하면 'message'키의 모든 값을 반환하지만, 난 그냥 1 (임의의 임의의 하나)이 필요합니다. –

+0

업데이트 된 답변을 확인하고 알려주십시오. 감사합니다 –

+0

당신은 나를 용서해야합니다 나는 firebase에 새로운 사람입니다. 이것이 내가 입력 한 것입니다 : –

관련 문제