gpt4 book ai didi

java - 在 Android 应用程序中放置数据库连接的位置

转载 作者:行者123 更新时间:2023-11-29 02:38:56 26 4
gpt4 key购买 nike

我在何处/如何将数据库连接集成到我的 Android 应用程序中遇到了一些问题。在尝试了几种不同的方法之后,我决定扩展应用程序类并将其放入其中。据我了解,虽然我需要它是静态的,以便我可以从任何地方访问它,并且我正在使用需要应用程序上下文才能工作的 GreenDAO。

问题是现在我已经开始使用 Dagger2(我不是很了解它,但不知何故让它工作了),但它不允许静态注入(inject)。下面是 MyApp 类:

public class MyApp extends Application {

@Inject
public DataSource dataSource;

private static MyApp instance;

public MyApp() {
instance = this;
}

@Override
public void onCreate() {
super.onCreate();

// Connect to our datasource
if (dataSource == null) {
DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build();
}
}

public static MyApp getInstance() {
return instance;
}

public DataSource getDataSource() {
return dataSource;
}

这是我的数据源类:

public class DataSource {

public DaoSession daoSession;
Context context;
public Database db;
@Inject
public DaoMaster.DevOpenHelper helper;

public DataSource(Context context, DaoMaster.DevOpenHelper helper) {
this.context = context;
this.helper = helper;

db = this.helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}

通常这一切都正常,但一旦我开始旋转屏幕,我就会发现数据库内存泄漏。我认为这是因为数据库不是静态的,并且在每次轮换时都会重新创建?我无法在我的 Activity 中创建数据库连接,因为我在 MVP 中了解到 Activity 应该不知道这些事情。

任何关于我应该如何解决这些内存泄漏的建议都将不胜感激。

更新:

在尝试之后,似乎在 MyApp 中注入(inject) DataSource 并没有真正起作用,事实证明它只在我的交互类中起作用(它也注入(inject)了 DataSource),所以我没有意识到它是在 MyApp 类中什么都不做。如果可能的话,我还是希望在这个 MyApp 类中对其进行排序,以便我可以全局访问单个连接(除非有更好的方法)。

最佳答案

看来我是傻了。在 MyApp 中我需要添加 .inject(this),所以

DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build();

成为

DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build().inject(this);

我现在有一个创建的数据库连接,即使在 Activity 被销毁时仍然存在,并且可以在整个应用程序中像这样访问:

dataSource = MyApp.getInstance().getDataSource();

不确定这是否是好的做法,但它解决了我的问题。如果有人对如何构建这个有任何更好的想法,很高兴听到。

关于java - 在 Android 应用程序中放置数据库连接的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45513290/

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