2017-08-04 70 views
2

我在哪裏/如何將數據庫連接集成到我的Android應用程序中遇到了一些麻煩。在嘗試了幾種不同的方法後,我決定擴展應用程序類並將其放在那裏。據我瞭解,雖然我需要它是靜態的,所以我可以從任何地方訪問它,並且我使用了需要應用程序上下文工作的GreenDAO。在哪裏把數據庫連接在Android應用程序

現在的問題是我已經開始使用Dagger2(我不太明白,但有某種方式讓它工作),但它不允許靜態注入。下面是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; 
} 

}

,這裏是我的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(); 
} 

一般來說,這一切工作不錯,但只要我開始旋轉屏幕,我得到數據庫的內存泄漏。我認爲這是因爲數據庫不是靜態的,並且在每次輪換時都被重新創建?我無法在我的活動中創建數據庫連接,因爲我在MVP中理解活動不應該知道這些事情。

任何意見,我應該如何去解決這些內存泄漏,將不勝感激。

UPDATE:

周圍玩耍似乎並不在MyApp的數據源的注入實際上是工作,事實證明,它只是在我的相互作用因子類的工作之後(也注入數據源) ,所以我沒有意識到它在MyApp類中沒有做任何事情。如果可能,我想在MyApp類中進行排序,這樣我就可以在全局訪問單個連接(除非有更好的方法)。

回答

0

看起來像我是愚蠢的。在MyApp的我需要添加.inject(這一點),所以

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

成爲

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

我現在有被創建,並在活動被破壞,即使仍然存在一個數據庫連接,並且可以像訪問所以在整個應用程序:

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

不知道這是否是好的做法,但它解決了我的問題。如果任何人有更好的想法如何構建這個快樂聽到它。

相關問題