如何在Activity和ContentProvider之间共享数据库?

时间:2012-04-02 12:52:02

标签: android database sqlite

我有一个Android Activity,一个ContentProvider(据我所知)自动实例化,因为我已经将它与res/xml/searchable.xml中的搜索意图相关联。

我还创建了一个SQLiteOpenHelper,我想在Activity和Content提供程序中使用它,但我不知道如何让它们都可以访问它们。

  • 如果我在Activity的onCreate中创建帮助器,我不知道如何 从ContentProvider获取对Activity的引用。
  • 如果我从ContentProvider的onCreate方法实例化帮助器,我 不知道如何获取对ContentProvider实例的引用 来自活动。

哪个对象应该拥有SQLiteOpenHelper,如何从另一个对象访问它?

2 个答案:

答案 0 :(得分:0)

您可以将其分配给您可以从ActivityContent Provider访问的全局Application对象。您可以在SQLOpenHelperActivity中实例化CP,只需检查其是否为null,以及它的null是否创建新的SQLOpenHelper对象并分配给全局对象。

public class ClassName extends Application {

    private SQLiteOpenHelper helper;

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
    }

    public SQLiteOpenHelper getHelper() {
        return helper;
    }

    public void setHelper(SQLiteOpenHelper helper) {
        this.helper = helper;
    }

}

,您必须在AndroidManifest.xml中指定您正在创建应用程序上下文

<application
        android:name="ClassName"             // <----- This line
        android:icon="@drawable/icon"
        android:label="@string/app_name" >

然后从您的ActivityContent Provider来电助手那样。

SQLiteOpenHelper helper = ((ClassName)getApplication()).getHelper();

if(null == helper) {
helper = new SQLiteOpenHelper();
}

答案 1 :(得分:0)

((ClassName)getContext()。getApplicationContext())。getHelper()