2012-04-02 83 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()方法