현재는 메소드가 LiveData를 리턴하지 않고 있기 때문에, 메소드가 LiveData를 리턴하도록 만드시면 됩니다.
public class MemberResult {
private final Member member;
private final Exception e;
public MemberResult(Member member, Exception e) {
this.member = member;
this.e = e;
}
public MemberResult(Member member) {
this.member = member;
this.e = null;
}
public MemberResult(Exception e) {
this.member = null;
this.e = e;
}
public Member getMember() {
return this.member;
}
public Exception getException() {
return this.e;
}
}
public MutableLiveData<MemberResult> fetchMemberById(String memberId){
// 멤버변수로 빼서 사용하는 게 더 나은지 확인해서, 더 나은 방법을 사용하시길....
final MuabelLiveData<MemberResult> liveData = new MutableLiveData<>();
DocumentReference docRef = db.collection("Members").document(emmberId);
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Member member = document.toObject(Member.class);
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
liveData.postValue(new MemberResult(member));
} else {
Log.d(TAG, "No such document");
liveData.postValue(new MemberResult(new NoSuchElementExceptioin());
}
} else {
Log.d(TAG, "get failed with ", task.getException());
liveData.postValue(new MemberResult(task.getException());
}
}
});
return liveData;
}
한가지 염두에 두실 점은 LiveData를 사용하는 것은 MVVM과는 사실 무관한 부분입니다. 더군다나 LiveData는 안드로이드에서만 제공되는 클래스라서 연습하시는 코드는 LiveData 사용법을 익히는 것에 좀 더 가깝다고 볼 수 있습니다. 랭귀지나 플랫폼에 상관없이 범용적으로 사용할 수 있도록 Listener를 등록/해제 하는 방법으로 연습하신 다음, LiveData 사용법을 익히시면 더 좋을 것 같습니다.