gpt4 book ai didi

java - MVVM架构中从存储库插入数据后无法切换到MainActivity

转载 作者:行者123 更新时间:2023-12-02 01:24:41 24 4
gpt4 key购买 nike

我正在为应用程序开发实现 MVVM 架构模式。我有两个 Activity MainActivityAddUser Activity 。在 MainActivity 中,我显示了以下列表所有注释,在 AddUser Activity 中,我将用户插入 room 数据库中。我正在存储库类中执行所有插入和获取注释操作。我正在使用 RxJava Completable 运算符在数据库中插入注释。

我想要的:插入后,它应该重定向到 MainActivity。

问题:当我使用 Intent 时,无法在 onComplete() 方法中添加 Intent,它显示错误。

错误

Process: com.app.notesreactive, PID: 3970
io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with.

下面是我的代码:

UserDao.java

@Dao
public interface UserDao {

@Insert
void insert(User user);

@Query("SELECT * FROM Users ORDER BY id DESC")
LiveData<List<User>> getAllUsers();

}

UserRepository.java

public class UserRepository {

private UserDb userDb;
private UserDao userDao;
private LiveData<List<User>> allUsers;
private Context ctx;

public UserRepository(Application application) {

userDb = UserDb.getInstance(application);
userDao = userDb.userDao();
allUsers = userDao.getAllUsers();
ctx = application.getApplicationContext();
}

public void insert(final User user){

Completable.fromAction(() -> userDb.userDao().insert(user))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {

@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onComplete() {

Intent i = new Intent(ctx,MainActivity.class);
ctx.startActivity(i);

Toast.makeText(ctx,"Data inserted", Toast.LENGTH_SHORT).show();
}

@Override
public void onError(Throwable e) {

Toast.makeText(ctx,e.getMessage(),Toast.LENGTH_SHORT).show();
}
});

}

public LiveData<List<User>> getAllUsers(){

return allUsers;
}

}

请有人帮助我如何才能达到预期的结果。任何帮助将不胜感激。

谢谢

最佳答案

从存储库类切换 Activity ,我们需要将以下标志添加到 Intent 中。这是更新的 onComplete() 方法。

@Override
public void onComplete() {

Intent i = new Intent(ctx,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
ctx.startActivity(i);

Toast.makeText(ctx,"Data inserted", Toast.LENGTH_SHORT).show();
}

希望对您有所帮助。

谢谢

关于java - MVVM架构中从存储库插入数据后无法切换到MainActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com