2011-07-05 42 views
0

存储共享对象我有一个类:所有活动

public class DbAdapter { 
    private DbHelper dbHelper; 
    private SQLiteDatabase db; 
    private final Context context; 
    ... 
} 

,我希望有它的所有活动提供。该类提供对我的sqlite数据库的访问。

什么是最优雅和干净的方式来做到这一点?我想过在每个活动中创建对象(它应该“连接”我到同一个数据库,对吧?)。

+0

还没有真的有时间来清理它或作为答案粘贴它,但看看我的DatabaseHelper http://pastebin.com/Bgi9dDkP,否则我会推荐一个单身人士 – Blundell

回答

2

您可以实现它扩展应用程序类。谷歌有这样说的:

对于那些谁需要 维护全球应用程序状态的基类。您 可以通过 自己的机制,在 AndroidManifest.xml中的 标签指定其名字,这将导致该类是 实例化时,你为你的应用程序/包的过程 是创建 。

通常不需要子类 应用程序。在大多数情况下,静态的 单身可以以更模块化的方式提供相同的功能。 如果你单身,需要一个全球性的 上下文(例如注册 广播接收机),该函数 检索它可以给出一个上下文 内部使用 Context.getApplicationContext()时 首先构建了单。

我已经做到了我自己是这样的:

public class App extends Application { 

    private DbHelper dbHelper; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     dbHelper = new DbHelper(this); 

    } 

    public SQLiteDatabase getDatabase(){ 
     return dbHelper.getWritableDatabase(); 
    } 

    @Override 
    public void onTerminate() { 
     super.onTerminate(); 
     dbHelper.close(); 
    } 
} 

然后你只需访问它调用getApplicationContext.getDatabase()

0

你可以看看Singleton Pattern,它给了一个机会让一个类只有一个对象被创建,并且使得这个对象可以从任何地方访问。希望这可以帮助。

+1

我的单身人士答案:http:///goo.gl/OhRVk :-D – Blundell

0

我认为最好的实现方法是使用ServiceService将继续参考DbAdapter,您的所有活动都将连接到Service。当活动连接到服务时,它会保持对它的引用,并且每次需要db访问时,它都会使用它来获取DbAdapter。使用这种方法你可以控制你的数据库连接。如果没有任何活动连接到服务,比没有人使用数据库连接,你可以释放它。

+0

你能说更多吗?我找不到任何写得很好的方法。当服务已经启动时,我现在不会如何连接到另一项活动的服务。 – BartoszCichecki

+0

您可以先阅读有关Android服务的文档。之后,您可以查看默认音乐播放器源代码http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=树。请特别注意MediaPlaybackService以及活动如何连接到它。如果你想学点东西,不要只看一步一步的教程,试着去了解你在做什么。 –

+0

我检查了如何做到这一点通过以下主题:http://stackoverflow.com/questions/3433883/creating-a-service-to-share-database-connection-between-all-activities-in-android,我得到同样的错误(真是一个惊喜)。你有什么想法可以纠正它吗? – BartoszCichecki

0

看一看ContentProviders。它们用于访问数据。不管所有关于链接中“在应用程序之间共享数据”的重点,它们都不必公开 - 您可以将它们用作访问应用程序中数据的集中方式。

'Writing Your Own ContentProvider'上的此博客条目显示了一些用于设置在一个应用程序内工作的ContentProvider的代码。