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}}} }
어떻게 메시지 객체로 변환 할 수 있습니다 ..... ????
.NET Framework DataSnapshot
를 사용할 필요없이 Firebase에서 데이터를 가져 오는 두 가지 방법이 더 있습니다 Map<String, Object>
.
첫 번째 방법은 다음과 같은 방법DataSnapshot
을 사용 하여 어린이를 횡단하는 것입니다.
ref = new Firebase("https://my.firebaseio.com/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 serializer / deserializer를 사용하는 것 입니다. 메시지 목록을 보낼 때 그 Message
안의 객체는 JSON으로 직렬화되고 Firebase에 저장됩니다.
그것들을 다시 빼내려면 반대로해야합니다.
ref = new Firebase("https://my.firebaseio.com/messages").limitToLast(10);
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"));
}
Iterating the values of dataSnapshot and getting Children using nested for loop to iterate the child elements of children and getting the Required Value...
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");
}
}
You could make it using a ChildEventListener
instead of a ValueEventListener
.
For example. I have a class called match with 3 string properties {id, name, photoUrl}
then I add all the values in a List
. Instead of using a for loop it works for me with this code.
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);
Use this code if you want to convert firebase object to 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) {
}
});
This will convert complete Database Structure to String json
ReferenceURL : https://stackoverflow.com/questions/30933328/how-to-convert-firebase-data-to-java-object
'code' 카테고리의 다른 글
Docker의 컨테이너 이름은 언제 사용합니까? (0) | 2021.01.10 |
---|---|
UIViewController의 여러 collectionView-IOS Swift (0) | 2021.01.10 |
BufRead에서 vim 설정 오류 (0) | 2021.01.10 |
iPhone X에서 UIView의 safeAreaInsets가 0입니다. (0) | 2021.01.10 |
대량 API를 사용하여 Python을 사용하여 ES에 키워드를 저장하는 방법 (0) | 2021.01.09 |