2012-04-02 65 views
0

我有一个Android的活动,并ContentProvider的是(据我所知),因为我已经在res/xml/searchable.xml搜索意图相关的它就会自动实例。如何在活动和ContentProvider之间共享数据库?

我还创建了我想从活动和内容提供商使用的一个SQLiteOpenHelper,但我不知道如何使它对两者进行访问。

  • 如果我创建活动的onCreate帮手,我不知道该怎么 去从ContentProvider的活动提供参考。
  • 如果我从ContentProvider的onCreate方法实例化助手,I 不知道如何从Activity获取对ContentProvider实例 的引用。

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

+0

如果你已经有CP使用SLOH只有在CP和通过CP活动ACCES数据... – Selvin 2012-04-02 12:56:03

+0

但是怎么办如果我没有对它的引用,我从Activity访问ContentProvider实例?这正是我的问题。 – 2012-04-02 13:13:30

+0

你不会得到CP的情况......你应该只是查询CP与'Activity.getContentResolver()查询(Uri.parse( “内容://your.content”。)的cols,休息日,,东西);'...... – Selvin 2012-04-02 13:26:53

回答

0

你可以把它分配给全球的应用对象,你就可以从ActivityContent Provider访问。你可以,如果只是检查实例化无论是ActivityCPSQLOpenHelper其空或不是,如果它的空创建新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(); 
} 
+0

我不认为['ContentProvider'](http://developer.android.com/reference/android/content/ContentProvider.html)具有'getApplication()'方法。我错过了什么吗? – 2012-04-02 13:37:28

+0

尝试使用getApplicationContext()而不是getApplication(),做同样的事情。 – Mayank 2012-04-02 13:45:53

+0

它也没有'getApplicationContext()'。 – 2012-04-02 13:49:44

0

((类名)的getContext()。getApplicationContext())。getHelper()方法