Firebase 데이터를 Java 개체로 변환하는 방법...?
Firebase 라이브러리를 사용하여 양식으로 서버로 데이터 전송Message(String, String)
에 추가된HashMap<String, Message>
예:
Firebase fb = new Firebase(URL);
Firebase msgRef = fb.child("finished");
HashMap<String, Message> msgList = new HashMap<>();
Message msg = new Message(m, n);
msgList.put(HASHKEY, msg);
msgRef.push().setValue(msgList);
Firebase 방법으로 데이터를 수신하는 동안addValueEventListener()
이 양식에서 문자열 가져오기
{ key = finished, value = {
-Js9Rn0uttjYIGdcv8I1={Moosa={message=email, name=Kamran}},
-Js9Vsmv6BnVzOzpl2L8={Moosa={message=msgs, name=Imran}},
-Js9WtQ8yeDwVxQMFCZb={Moosa={message=samsung, name=Samad}},
-Js9RarxoJPKn4RO2HaM={Moosa={message=Message, name=Moosa}},
-Js9b6f75lwwbsqQNJz0={Moosa={message=Qmobile, name=Bilal}},
-Js9aDxt8TlgTGUccuxu={Moosa={message=last, name=Moosa}}} }
어떻게 하면 메시지 개체로 변환할 수 있습니까......?
파이어베이스에서 데이터를 빼내는 방법은 두 가지가 더 있습니다.DataSnapshot
사용할 필요가 없습니다.Map<String, Object>
.
첫 번째 방법은 의 방법을 사용하여 하위 항목을 이동하는 것입니다.
ref = FirebaseDatabase.getInstance().getReference("messages").limitToLast(10);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
String name = (String) messageSnapshot.child("name").getValue();
String message = (String) messageSnapshot.child("message").getValue();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
위의 스니펫에서 우리는 사용합니다.getChildren()
점수를 따다Iterable
메시지에 대한 내용입니다.그러면 우리는child("name")
각 특정 하위 속성을 가져옵니다.
두 번째 접근 방식은 내장된 JSON-to-POJO 직렬화/직렬화를 사용하는 것입니다.메시지 목록을 보낼 때,Message
내부의 객체는 JSON에 직렬화되어 Firebase에 저장됩니다.
그들을 다시 탈출시키려면 반대로 해야 합니다.
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
Message message = messageSnapshot.getValue(Message.class);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
이 두 번째 스니펫에서 우리는getChildren()
메시지를 얻기 위해, 하지만 이제 우리는 JSON에서 바로 다시 메시지를 역직렬화합니다.Message
물건.
마지막 접근 방식을 사용하는 간단한 샘플 애플리케이션의 경우 Firebase의 AndroidChat 샘플을 확인하십시오.또한 메시지 목록을 효율적으로 처리하는 방법을 보여줍니다(힌트:FirebaseListAdapter
).
따라서 메시지를 받으려면 다음을 수행하십시오.
for (DataSnapshot child : dataSnapshot.getChildren()){
//child is each element in the finished list
Map<String, Object> message = (Map<String, Object>)child.getValue();
Message msg = new Message((String) message.getValue().get("message"),
(String) message.get("name"));
}
데이터 스냅샷 값을 반복하고 중첩된 루프를 사용하여 하위 요소를 반복하고 필요한 값을 가져오는 중...
for (DataSnapshot child : dataSnapshot.getChildren()) {
for (DataSnapshot single : child.getChildren()) {
Map<String, Object> map = (Map<String, Object>) single.getValue();
String a = (String) map.get("message");
String b = (String) map.get("name");
textView.append(b + " -- " + a + "\n");
}
}
Gson 라이브러리를 사용하여 Firebase 개체를 json으로 변환하려면 다음 코드를 사용합니다.
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Object object = dataSnapshot.getValue(Object.class);
String json = new Gson().toJson(object);
Example example= new Gson().fromJson(json, Example.class);
Log.e("json","json: " + example.getGlossary());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
이것은 완전한 데이터베이스 구조를 String json으로 변환한 다음 gson Lib를 사용하여 json을 클래스 개체로 변환합니다.
당신은 그것을 사용할 수 있습니다.ChildEventListener
대신에ValueEventListener
.
예를들면.나는 3개의 문자열 속성을 가진 매치라는 클래스가 있습니다.{id, name, photoUrl}
그런 다음 모든 값을 a에 추가합니다.List
for 루프를 사용하는 대신 이 코드로 작동합니다.
Query queryRef = mDatabase.child("users").child(user.getUid()).child("matches");
ChildEventListener listener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Match match = dataSnapshot.getValue(Match.class);
matchList.add(match);
mAdapter = new MatchAdapter(getContext(), matchList);
recyclerView.setAdapter(mAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d("MESSAGEFRAGMENT", "CHILDCHANGE");
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
queryRef.addChildEventListener(listener);
언급URL : https://stackoverflow.com/questions/30933328/how-to-convert-firebase-data-to-java-object
'programing' 카테고리의 다른 글
파이어베이스에서 데이터를 구성하는 가장 좋은 방법은 무엇입니까? (0) | 2023.06.10 |
---|---|
vuex, vue-router, pinia 등에 액세스하는 방법SSR 친화적인 방식으로 Vue 구성 요소 외부에? (0) | 2023.06.10 |
다른 워크북에서 매크로 실행 (0) | 2023.06.10 |
()에 대한 이해 및 파티션 분할 시도 (0) | 2023.06.10 |
C의 함수에서 로컬 변수 반환 (0) | 2023.06.10 |