我想在LiveData对象上的存储库中更新对象的成员变量。问题是,如果我调用了getValue()方法,尽管该值确实存在于我的RoomLibrary中,但我仍会收到NullPointerException。
我现在的问题是,如何从LiveData对象获取值,而无需调用observe()方法?(我无法在我的存储库中调用观察方法,因为该方法要我输入LifeCycleOwner-引用,该引用在我的存储库中不存在)。
有什么方法可以从LiveData对象中获取值?
我的架构如下所示:ViewModel->存储库-> Dao
我需要清除对mvp和mvvm设计模式的一些疑问
1)在更新视图的mvp和mvvm中.presenter / view-model设置要在视图中显示的数据或该视图从presenter / view-model中检索数据并显示
2)演示者和视图模型如何彼此不同。“ MVVM使用数据绑定来更新视图,而演示者使用传统方法来更新视图 ”。是吗?
我LiveData在AndroidViewModel课堂上使用,我需要等待响应,但在某些情况下,我需要从本地检查一些值shared preference,这不会阻止任何线程.
对于这些我不使用的场景LiveData.这就是我在做的事情activity class.
 homeViewModel.sendTokenToServer().observe(this, isFCMSendToServer -> {
        Toast.makeText(this, "FCM Token Observer called", Toast.LENGTH_SHORT).show();
 });
//Without Live Data
if(homeViewModel.isUpgradeAvailable()){
     displayAlertMessage();
}
我想知道上面的方法是否正常,或者我们必须LiveData为每个方法使用或其他一些观察者ViewModel
我有一个采用 MVVM 结构的应用程序。我在同一个活动中有不同的片段。每个片段都有自己的 ViewModel,所有数据均从 REST API 检索。
在FragmentA中,有一个RecyclerView列出了X个类实例。我想在 RecyclerView 上设置 OnClickListener,并且当在 RecyclerView 中单击某个项目时,我想将相关的 X 对象传递给 FragmentB。我怎样才能实现这个目标?
我正在使用MVVM模式开发小型 Android 应用程序。我的问题是ViewModelMyActivity 中的观察者没有从后台调用。即使应用程序位于后台,我也需要调用它,以Notification向用户显示应用程序计算过程已完成且结果已准备就绪。
这是当前的实现,onCreate位于MyActivity:
mainActivityViewModel.getTestResult().observe(MainActivity.this, new Observer<String>() {
        @Override
        public void onChanged(@Nullable String blogList) {
            Toast.makeText(getApplicationContext(), "test...", Toast.LENGTH_SHORT).show();
            if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)){
                //The app is in foreground - showDialog
            }else{
                //The app is in background - showNotification
            }
        }
目前,仅当应用程序位于前台时才会调用此观察者 - 如果应用程序位于前台时完成进程 - 'showDialog' 将触发,如果应用程序位于后台 - showNotification 将触发 - 但只有在我打开之后再次打开该应用程序。这不是我试图实现的行为。请帮忙!谢谢。
我正在为这两种情况寻找一个实际的例子,什么时候使用什么?我见过类似的线程,但它们只告诉“何时必须立即执行绑定”,但对于必须强制执行绑定的任何情况,都没有实时示例。所以请如果有人能用任何例子来解释什么时候使用它,什么时候不需要!
我正在研究ViewModel将其应用到MVVM设计模式中。
有一个使用方法by viemodels()和一个ViewModelProvider.Factory在视图模型创建中使用的方法。
by viewModels()创建一个ViewModel object.
ViewModelProvider.Factory还创建Viewmodel objects.
这两者有什么区别?
另外,在一些示例代码中,我看到注释中的代码3,其中使用了by viewModels()and factory。这是什么意思?
class WritingRoutineFragment : Fragment() {
    private val viewModel: WriteRoutineViewModel by viewModels() // 1
    private lateinit var viewModelFactory: WriteRoutineViewModelFactory
//  private val viewModel: WriteRoutineViewModel by viewModels(
//        factoryProducer = { viewModelFactory } // 3.What does this code mean?
//  )
    override fun onCreateView(inflater: LayoutInflater,
                              container: ViewGroup?,
                              savedInstanceState: Bundle?): View? { …我正在尝试学习 MVVM 以使我的应用程序的架构更加干净。但我很难掌握如何为我的应用程序创建“域”层。
目前,我的项目结构如下:
我的View是活动。我ViewModel有一个活动可以调用的公共方法。一旦调用 ViewModel 中的方法,它就会调用我的Repository类中的一个方法,该方法执行网络调用,然后将数据返回到 ViewModel。然后,我更新LiveDataViewModel 中的 ,以便更新 Activity 的 UI。
这就是我对如何Domain向结构添加层感到困惑的地方。我读过很多关于 Domain 层的 Stackoverflow 答案和博客,它们大多告诉您从 Domain 层中删除所有业务逻辑ViewModel并创建一个纯 Java/Kotlin 类。
所以而不是
View --> ViewModel --> Repository
我将从 与班级进行通信ViewModel,Domain班级Domain将与 进行通信Repository?
View --> ViewModel --> Domain --> Repository
我用我的电话给班级RxJava打电话。ViewModelRepository
@HiltViewModel
public class PostViewModel extends ViewModel {
    private static final String TAG = "PostViewModel";
    private final List<Post> …我搜索了很多关于可观察模型和参数的信息,但我很困惑!
1-某些模型从setter扩展BaseObservable并设置notifyChange();在 setter 中并将它们绑定到例如这样的 edittext:app:addTextChangedListener="@{viewModel.getEmailTextWatcher}"并notifyChange()通过更改模型的email参数来更新文本user。
2-其中一些livedata用于观察和更改onChanged()方法中的UI 。如何使用liveData和更改用户界面databinding?不是onChanged(). 何时onChanged()使用而我们可以databinding用于 UI 更改?
编辑: 这是我的编码:
public class MainActivity extends AppCompatActivity implements LoginResultCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    activityMainBinding.setViewModel(ViewModelProviders.of(this, new LoginViewModelFactory(this)).get(LoginViewModel.class));
}
@Override
public void onSuccess(String s) {
    Toasty.success(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(String s) {
    Toasty.error(getApplicationContext(), s, …data-binding android android-mvvm android-livedata android-architecture-components
我正在尝试使用 Android ViewModel 添加 Room 数据库。我按照此链接进行了相同的https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#13
我遇到了一个例外:
导致:java.lang.RuntimeException:无法创建类 com.example.dailyfaithapp.ViewModels.FavouritesViewModel 的实例
我检查了一些问题和答案,但没有一个对我有用。
这是我的视图模型
public class FavouritesViewModel extends ViewModel {
        public FavouriteRepository mRepository;
        public LiveData<List<Favourites>> mAllFavourites;
    public FavouritesViewModel (Application application) {
            mRepository = new FavouriteRepository(application);
            mAllFavourites = mRepository.getmAllFavourites();
        }
        public LiveData<List<Favourites>> getmAllFavourites() { return mAllFavourites; }
        public void insert(Favourites favourites) { mRepository.insertFavourite(favourites); }
}
我还尝试使用视图模型工厂调用视图模型,但在这里不起作用
public class FavouritesViewModelFactory implements ViewModelProvider.Factory {
    private Application mApplication;
    private String mParam;
    public FavouritesViewModelFactory(Application application) {
        mApplication = application;
    }
    @Override
    public <T extends ViewModel> T …android-mvvm ×10
android ×9
android-architecture-components ×2
kotlin ×2
mvvm ×2
android-mvp ×1
android-room ×1
data-binding ×1
java ×1