Java 存储库MVVM体系结构中的堆栈溢出错误
我想在我的应用程序中使用Room db实现MVVM。我跟踪了这个链接 我在创建视图模型实例时出错。当我解决这个问题时,我遇到了如下新错误:Java 存储库MVVM体系结构中的堆栈溢出错误,java,android,stack-overflow,android-viewmodel,android-mvvm,Java,Android,Stack Overflow,Android Viewmodel,Android Mvvm,我想在我的应用程序中使用Room db实现MVVM。我跟踪了这个链接 我在创建视图模型实例时出错。当我解决这个问题时,我遇到了如下新错误: Process: com.example.dailyfaithapp, PID: 7341 java.lang.StackOverflowError: stack size 8192KB at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllF
Process: com.example.dailyfaithapp, PID: 7341
java.lang.StackOverflowError: stack size 8192KB
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
2020-04-28 18:10:23.865 7341-7341/com.example.dailyfaithapp E/AndroidRuntime: at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
2020-04-28 18:10:29.491 7341-7356/com.example.dailyfaithapp I/e.dailyfaithap: Background concurrent copying GC freed 395507(38MB) AllocSpace objects, 1(3804KB) LOS objects, 5% free, 95MB/101MB, paused 337us total 142.457ms
2020-04-28 18:10:29.720 7341-7341/com.example.dailyfaithapp I/chatty: uid=10141(com.example.dailyfaithapp) identical 8100 lines
2020-04-28 18:10:29.720 7341-7341/com.example.dailyfaithapp E/AndroidRuntime: at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
2020-04-28 18:10:29.720 7341-7341/com.example.dailyfaithapp E/AndroidRuntime: at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.Repositories.FavouriteRepository.getAllFavourites(FavouriteRepository.java:25)
at com.example.dailyfaithapp.ViewModels.FavouritesViewModel.<init>(FavouritesViewModel.java:26)
at com.example.dailyfaithapp.FavouritesViewModelFactory.create(FavouritesViewModelFactory.java:25)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.dailyfaithapp.Activities.FavouritesActivity.setUpUI(FavouritesActivity.java:72)
at com.example.dailyfaithapp.Activities.FavouritesActivity.onCreate(FavouritesActivity.java:54)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
这是我的视图模型
public class FavouritesViewModel extends AndroidViewModel {
public FavouriteRepository mRepository;
public LiveData<List<Favourites>> mAllFavourites;
private MutableLiveData<List<Favourites>> favouriteSearchResults;
public FavouritesViewModel (Application application) {
super(application);
mRepository = new FavouriteRepository(application);
mAllFavourites = mRepository.getAllFavourites();
favouriteSearchResults = mRepository.getFavouritesSearch();
}
public LiveData<List<Favourites>> getmAllFavourites() { return mAllFavourites; }
}
刀
@Dao
公共接口收藏夹DAO{
@查询(“从收藏夹中选择*)
LiveData GetAllFavorites();
@查询(“从收藏夹中选择*)
列出loadAllFavorites();
@插入(onConflict=OnConflictStrategy.REPLACE)
void insertallfavorites(收藏夹…收藏夹);
@插入(onConflict=OnConflictStrategy.REPLACE)
公共空白插入收藏夹(收藏夹收藏夹);
@删除
作废删除(收藏夹收藏夹);
}
在调试时,我看到repository方法的getAllFavorites()被称为continuous,因为内存已经满了
这是我的活动
public void setUpUI(){
recyclerView = findViewById(R.id.recycler_view_favourites);
constraintLayoutEmpty = findViewById(R.id.constraint_empty);
imageViewBack = findViewById(R.id.imageView_back);
imageViewBack.setOnClickListener(this);
favouritesViewModel = new ViewModelProvider(this,
new FavouritesViewModelFactory(getApplication())).get(FavouritesViewModel.class);
favouritesViewModel.getmAllFavourites().observe(this,
new Observer<List<Favourites>>() {
@Override
public void onChanged(@Nullable final List<Favourites> products) {
favouritesArrayList = products;
}
});
}
public void setUpUI(){
recyclerView=findViewById(R.id.recycler\u view\u Favorites);
constraintLayoutEmpty=findViewById(R.id.constraint\u empty);
imageViewBack=findViewById(R.id.imageView\u back);
setOnClickListener(这个);
FavoritesViewModel=新的ViewModelProvider(此,
新建FavoriteSviewmodelFactory(getApplication()).get(FavoriteSviewmodel.class);
FavoritesViewModel.GetMallFavorites()。观察(此,
新观察员(){
@凌驾
更改后的公共void(@Nullable final List products){
FavoriteSarraylist=产品;
}
});
}
在创建活动时调用setUpUI
请帮忙。谢谢。在
收藏库中
您正在做:
public LiveData<List<Favourites>> getAllFavourites() {
return getAllFavourites();
}
public LiveData getAllFavorites(){
返回getAllFavorites();
}
此方法正在调用自身。
你得看看你需要什么,而不是自己打电话
我想你在下一种方法中也有同样的问题:
public MutableLiveData<List<Favourites>> getFavouritesSearch() {
return getFavouritesSearch();
}
public MutableLiveData getFavoriteSearch(){
返回getFavoriteSearch();
}
你需要解决这些问题。我不明白。。?该方法正在被调用,我不知道如何调用。@Sid它是从
FavoriteSviewmodel
类构造函数调用的,我相信它是从FavoriteSviewmodelFactory
类的create
方法调用的,在创建viewmodel:-|没有理解您。意思是它会被调用两次吗?@Sid我无法帮你编写代码,因为我不知道你想做什么。我可以告诉你哪里做错了什么。您必须调用favoritesdao
中的方法,从数据库中获取数据,而不是执行递归调用。是一个很好的开始如何使用房间数据库的地方。您还可以了解livedata和viewmodel@SidgetAllFavorites
被无限期调用
,直到堆栈溢出,这就是获得异常的原因。只需在getAllFavorites
中放一个日志,自己查看即可。
@Database(entities = {Favourites.class}, version = 1, exportSchema = false)
public abstract class FavouritesDatabase extends RoomDatabase {
public abstract FavouritesDAO favouritesDAO();
private static FavouritesDatabase INSTANCE;
public static FavouritesDatabase getFavouritesDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (FavouritesDatabase.class) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(
context.getApplicationContext(),
FavouritesDatabase.class,
"favourites_database"
).build();
}
}
}
return INSTANCE;
}
}
@Dao
public interface FavouritesDAO {
@Query("SELECT * FROM favourites")
LiveData<List<Favourites>> getAllFavourites();
@Query("SELECT * FROM favourites")
List<Favourites> loadAllFavorites();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAllFavourites(Favourites... favourites);
@Insert(onConflict = OnConflictStrategy.REPLACE)
public void insertFavourite(Favourites favourites);
@Delete
void delete(Favourites favourites);
}
public void setUpUI(){
recyclerView = findViewById(R.id.recycler_view_favourites);
constraintLayoutEmpty = findViewById(R.id.constraint_empty);
imageViewBack = findViewById(R.id.imageView_back);
imageViewBack.setOnClickListener(this);
favouritesViewModel = new ViewModelProvider(this,
new FavouritesViewModelFactory(getApplication())).get(FavouritesViewModel.class);
favouritesViewModel.getmAllFavourites().observe(this,
new Observer<List<Favourites>>() {
@Override
public void onChanged(@Nullable final List<Favourites> products) {
favouritesArrayList = products;
}
});
}
public LiveData<List<Favourites>> getAllFavourites() {
return getAllFavourites();
}
public MutableLiveData<List<Favourites>> getFavouritesSearch() {
return getFavouritesSearch();
}