标签: android-mvvm

调用getValue()后,LiveData对象保持为空

我想在LiveData对象上的存储库中更新对象的成员变量。问题是,如果我调用了getValue()方法,尽管该值确实存在于我的RoomLibrary中,但我仍会收到NullPointerException。

我现在的问题是,如何从LiveData对象获取值,而无需调用observe()方法?(我无法在我的存储库中调用观察方法,因为该方法要我输入LifeCycleOwner-引用,该引用在我的存储库中不存在)。

有什么方法可以从LiveData对象中获取值?

我的架构如下所示:ViewModel->存储库-> Dao

android-mvvm android-room android-livedata

6
推荐指数
2
解决办法
7202
查看次数

mvp中的演示者和mvvm中的视图模型有什么区别

我需要清除对mvp和mvvm设计模式的一些疑问

1)在更新视图的mvp和mvvm中.presenter / view-model设置要在视图中显示的数据或该视图从presenter / view-model中检索数据并显示

2)演示者和视图模型如何彼此不同。“ MVVM使用数据绑定来更新视图,而演示者使用传统方法来更新视图 ”。是吗?

android mvvm kotlin android-mvvm android-mvp

6
推荐指数
1
解决办法
1562
查看次数

没有实时数据使用ViewModel是否很好

LiveDataAndroidViewModel课堂上使用,我需要等待响应,但在某些情况下,我需要从本地检查一些值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();
}
Run Code Online (Sandbox Code Playgroud)

我想知道上面的方法是否正常,或者我们必须LiveData为每个方法使用或其他一些观察者ViewModel

android android-mvvm android-architecture-components

6
推荐指数
1
解决办法
2299
查看次数

如何在 MVVM 结构中的 RecyclerView 项上设置 OnClickListener

我有一个采用 MVVM 结构的应用程序。我在同一个活动中有不同的片段。每个片段都有自己的 ViewModel,所有数据均从 REST API 检索。

在FragmentA中,有一个RecyclerView列出了X个类实例。我想在 RecyclerView 上设置 OnClickListener,并且当在 RecyclerView 中单击某个项目时,我想将相关的 X 对象传递给 FragmentB。我怎样才能实现这个目标?

android onclicklistener android-recyclerview android-mvvm

6
推荐指数
2
解决办法
7926
查看次数

Android ViewModel 观察者未从后台调用

我正在使用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
            }
        }
Run Code Online (Sandbox Code Playgroud)

目前,仅当应用程序位于前台时才会调用此观察者 - 如果应用程序位于前台时完成进程 - 'showDialog' 将触发,如果应用程序位于后台 - showNotification 将触发 - 但只有在我打开之后再次打开该应用程序。这不是我试图实现的行为。请帮忙!谢谢。

android android-mvvm

6
推荐指数
1
解决办法
3853
查看次数

何时使用 executePendingBindings() 以及何时不需要?

我正在为这两种情况寻找一个实际的例子,什么时候使用什么?我见过类似的线程,但它们只告诉“何时必须立即执行绑定”,但对于必须强制执行绑定的任何情况,都没有实时示例。所以请如果有人能用任何例子来解释什么时候使用它,什么时候不需要!

android mvvm android-databinding android-mvvm

6
推荐指数
1
解决办法
593
查看次数

通过视图模型和使用工厂创建视图模型之间的区别?

我正在研究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? { …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-mvvm android-viewmodel

6
推荐指数
1
解决办法
4747
查看次数

MVVM - 很难理解如何在 Clean Architecture 中创建域层

我正在尝试学习 MVVM 以使我的应用程序的架构更加干净。但我很难掌握如何为我的应用程序创建“域”层。

目前,我的项目结构如下:

我的View是活动。我ViewModel有一个活动可以调用的公共方法。一旦调用 ViewModel 中的方法,它就会调用我的Repository类中的一个方法,该方法执行网络调用,然后将数据返回到 ViewModel。然后,我更新LiveDataViewModel 中的 ,以便更新 Activity 的 UI。

这就是我对如何Domain向结构添加层感到困惑的地方。我读过很多关于 Domain 层的 Stackoverflow 答案和博客,它们大多告诉您从 Domain 层中删除所有业务逻辑ViewModel并创建一个纯 Java/Kotlin 类。

所以而不是

View --> ViewModel --> Repository

我将从 与班级进行通信ViewModelDomain班级Domain将与 进行通信Repository

View --> ViewModel --> Domain --> Repository

我用我的电话给班级RxJava打电话。ViewModelRepository

@HiltViewModel
public class PostViewModel extends ViewModel {

    private static final String TAG = "PostViewModel";

    private final List<Post> …
Run Code Online (Sandbox Code Playgroud)

android clean-architecture android-mvvm

6
推荐指数
1
解决办法
2518
查看次数

如何在 Android 中实现 Livedata 和 Databinding?

我搜索了很多关于可观察模型和参数的信息,但我很困惑!

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, …
Run Code Online (Sandbox Code Playgroud)

data-binding android android-mvvm android-livedata android-architecture-components

5
推荐指数
1
解决办法
2848
查看次数

无法在 android 中创建 AndroidViewModel 类的实例

我正在尝试使用 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); }

}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用视图模型工厂调用视图模型,但在这里不起作用

public class FavouritesViewModelFactory implements ViewModelProvider.Factory {
    private Application mApplication;
    private String mParam;


    public FavouritesViewModelFactory(Application application) {
        mApplication = application;
    }


    @Override
    public <T extends ViewModel> T …
Run Code Online (Sandbox Code Playgroud)

java android instantiation android-mvvm android-viewmodel

5
推荐指数
1
解决办法
1万
查看次数