MVVM - 从存储库 class 检索后在哪里格式化数据?
MVVM - Where to format data after retrieving from from repository class?
在我的 fragment
class 中,我正在调用 ViewModel
从 repository
检索数据。我有一个简单的例子可以工作,现在我正在尝试格式化数据(例如,根据某个特定值更改每个用户的名称字符串)。但是我对在哪里格式化数据,以及如何格式化 LiveData 感到非常困惑?
//Fragment class
private void setListener() {
//Listening for new data
mViewModel.getMembersLiveData().observe(getViewLifecycleOwner(), new Observer<ResponseBody>() {
@Override
public void onChanged(ResponseBody responseBody) {
if (responseBody != null) {
loadDataIntoRecycler(responseBody);
}
}
});
//Call viewmodel to perform query
int id = SharedPrefManager.getInstance(mContext).getId();
mViewModel.getMembers(id);
}
在我的 ViewModel 中:
public class MembersViewModel extends AndroidViewModel {
private LiveData<ResponseBody> mMembersLiveData;
private UserRepo mRepo;
public MembersViewModel(@NonNull Application application) {
super(application);
}
public void init() {
mRepo = new UserRepo();
mMembersLiveData = mRepo.getMembersLiveData();
}
//Call Repo class to query for data
public void getMembers(int id) {
mRepo.getMembers(id);
}
public LiveData<ResponseBody> getMembersLiveData() {
return mMembersLiveData;
}
}
存储库class:
public class UserRepo {
private static final String TAG = "UserRepo";
private MutableLiveData<ResponseBody> mMembersLiveData;
private UserService mUserService;
public UserRepo() {
mMembersLiveData = new MutableLiveData<>();
Retrofit retrofit = RetrofitClientInstance.getRetrofitInstance();
mUserService = retrofit.create(UserService.class);
}
public MutableLiveData<ResponseBody> getMembersLiveData() {
return mMembersLiveData;
}
public void getMembers(int id) {
Call<ResponseBody> call = mUserService.GetUserFamilyMembers(id);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
if (response.body() != null) {
mMembersLiveData.postValue(response.body());
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
mMembersLiveData.postValue(null);
}
});
}
}
在上述情况下,请在 ViewModel
.
内格式化/转换数据
这将导致干净的代码,并且您还可以获得 space 以供将来修改。
有许多不同的方式来转换实时数据。
请参考此 LINK 并导航到部分 Transform LiveData.
它包含有用且简单的示例,将为您提供开始的方向..
在我的 fragment
class 中,我正在调用 ViewModel
从 repository
检索数据。我有一个简单的例子可以工作,现在我正在尝试格式化数据(例如,根据某个特定值更改每个用户的名称字符串)。但是我对在哪里格式化数据,以及如何格式化 LiveData 感到非常困惑?
//Fragment class
private void setListener() {
//Listening for new data
mViewModel.getMembersLiveData().observe(getViewLifecycleOwner(), new Observer<ResponseBody>() {
@Override
public void onChanged(ResponseBody responseBody) {
if (responseBody != null) {
loadDataIntoRecycler(responseBody);
}
}
});
//Call viewmodel to perform query
int id = SharedPrefManager.getInstance(mContext).getId();
mViewModel.getMembers(id);
}
在我的 ViewModel 中:
public class MembersViewModel extends AndroidViewModel {
private LiveData<ResponseBody> mMembersLiveData;
private UserRepo mRepo;
public MembersViewModel(@NonNull Application application) {
super(application);
}
public void init() {
mRepo = new UserRepo();
mMembersLiveData = mRepo.getMembersLiveData();
}
//Call Repo class to query for data
public void getMembers(int id) {
mRepo.getMembers(id);
}
public LiveData<ResponseBody> getMembersLiveData() {
return mMembersLiveData;
}
}
存储库class:
public class UserRepo {
private static final String TAG = "UserRepo";
private MutableLiveData<ResponseBody> mMembersLiveData;
private UserService mUserService;
public UserRepo() {
mMembersLiveData = new MutableLiveData<>();
Retrofit retrofit = RetrofitClientInstance.getRetrofitInstance();
mUserService = retrofit.create(UserService.class);
}
public MutableLiveData<ResponseBody> getMembersLiveData() {
return mMembersLiveData;
}
public void getMembers(int id) {
Call<ResponseBody> call = mUserService.GetUserFamilyMembers(id);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
if (response.body() != null) {
mMembersLiveData.postValue(response.body());
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
mMembersLiveData.postValue(null);
}
});
}
}
在上述情况下,请在 ViewModel
.
内格式化/转换数据
这将导致干净的代码,并且您还可以获得 space 以供将来修改。
有许多不同的方式来转换实时数据。
请参考此 LINK 并导航到部分 Transform LiveData.
它包含有用且简单的示例,将为您提供开始的方向..