Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间数据库正在返回1个额外对象_Android_Android Room_Android Livedata - Fatal编程技术网

Android 房间数据库正在返回1个额外对象

Android 房间数据库正在返回1个额外对象,android,android-room,android-livedata,Android,Android Room,Android Livedata,我有一个room DB类,可以创建3个用户对象- @Database(entities={User.class},version=1,exportSchema=false) 公共抽象类UserDatabase扩展了RoomDatabase{ 私有静态用户数据库实例; 公共抽象UserDao UserDao(); 公共静态同步UserDatabase getInstance(上下文){ d(“内部观察-”,“内部数据库”); if(实例==null){ instance=Room.database

我有一个room DB类,可以创建3个用户对象-

@Database(entities={User.class},version=1,exportSchema=false)
公共抽象类UserDatabase扩展了RoomDatabase{
私有静态用户数据库实例;
公共抽象UserDao UserDao();
公共静态同步UserDatabase getInstance(上下文){
d(“内部观察-”,“内部数据库”);
if(实例==null){
instance=Room.databaseBuilder(context.getApplicationContext(),UserDatabase.class,“用户\数据库”).fallbackToDestructiveMigration().addCallback(roomUserCallback).build();
}
返回实例;
}
私有静态RoomDatabase.Callback roomUserCallback=新建RoomDatabase.Callback(){
@凌驾
public void onCreate(@NonNull SupportSQLiteDatabase db){
super.onCreate(db);
新填充的Basynctask(实例).execute();
}
};
//TODO-以后删除此项。此项仅用于填充。
私有静态类填充Basynctask扩展异步任务{
静态最终字符串URL=”https://www.shortlist.com/media/images/2019/05/40-favourite-songs-of-famous-people-28-1556672663-9rFo-column-width-inline.jpg";
静态最终字符串URL2=”https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BBR9VUw.img?h=416&“w=624&m=6&q=60&u=t&o=f&l=f&x=2232&y=979”;
静态最终字符串URL3=”https://dz9yg0snnohlc.cloudfront.net/new-what-famous-people-with-depression-have-said-about-the-condition-1.jpg";
私有UserDao UserDao;
私有填充的Basynctask(用户数据库数据库){
userDao=db.userDao();
}
@凌驾
受保护的空位背景(空位…空位){
insert(新用户(URL,“Barak Obama1”,“/@BarakObama1”);
userDao.insert(新用户(URL2,“巴拉克·奥巴马2”,“/@BarakObama2”);
userDao.insert(新用户(URL3,“Barak Obama3”,“/@BarakObama3”);
返回null;
}
}
}
我使用viewmodel来获取用户作为LiveData。 出于某种原因,在我第一次安装我的应用程序时,我额外创建了一个“巴拉克·奥巴玛1”用户,并且很快就超过了所有3个“正常”用户的顺序-巴拉克·奥巴玛3、2和1。 这是我的主要活动-

private ArrayList usersList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fetchUserList();
}
私有void fetchUserList(){
userViewModel=ViewModelProviders.of(this.get)(userViewModel.class);
最终观察者用户观察者=用户->{
Log.d(“inside observe-”,“inside main activity,list size-”+users.size());
usersList=(ArrayList)用户;
initViewsAndListeners();
addCards();
};
userViewModel.getAllUsers().observe(这是userObserver);
}
私人信用卡(){
TinderCardView TinderCardView;
for(int i=0;i
正如你所看到的,我的日志信息到处都是,所以你可以理解我现在要向你展示的内容。我得到了一个额外的用户,“巴拉克·奥巴玛1”用户,然后所有其他3-

livedata发现列表中有1个用户,添加为卡,然后DB创建新对象,livedata调用该方法,再添加3个用户

为什么会发生这种情况??如果某人解决了这个问题,我会很高兴地亲吻他的腿,不是开玩笑

编辑-

这是我的ViewModel-

公共类UserViewModel扩展了AndroidViewModel{
私有用户存储库;
私有LiveData用户;
public UserViewModel(@NonNull应用程序){
超级(应用);
repository=新用户存储库(应用程序);
allUsers=repository.getAllUsers();
}
公共作废插入(用户){
插入(用户);
}
公共无效更新(用户){
更新(用户);
}
公共作废删除(用户){
删除(用户);
}
公共图书馆{
repository.deleteAllUsers();
}
公共LiveData getAllUsers(){
Log.d(“内部观察-”,“内部视图模型”);
回归诱惑;
}
}
还有我的回答-

公共类用户存储库{
私有UserDao UserDao;
私有LiveData用户;
公共用户存储库(应用程序){
UserDatabase=UserDatabase.getInstance(应用程序);
userDao=database.userDao();
allUsers=userDao.getAllUsers();
}
公共作废插入(用户){
新建InsertUserAsyncTask(userDao)。执行(user);
}
公共无效更新(用户){
新建UpdateUserAsyncTask(userDao)。执行(user);
}
公共作废删除(用户){
新建DeleteUserAsyncTask(userDao).execute(us
private ArrayList<User> usersList;

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.usersList = new ArrayList(); // initalise the array list here
    fetchUserList();
  }

  private void fetchUserList() {
    userViewModel = ViewModelProviders.of(this).get(UserViewModel.class);
    final Observer<List<User>> userObserver = users -> {
      Log.d("inside observe - ", "inside main activity, list size - " + users.size());
      usersList = (ArrayList) users; //dont do this ! instead follow the below instructions
      // to do
      for(User user : users){
        if(!usersList.contains(user)){
            usersList.add(user);
        }
      }
      // to do ends here
      initViewsAndListeners();
      addCards();
    };
    userViewModel.getAllUsers().observe(this, userObserver);
  }

}