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에 추가합니다.Listfor 루프를 사용하는 대신 이 코드로 작동합니다.
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 |