2013-12-17 32 views
0

我構建了延伸SQLiteOpenHelper的SQL精簡版處理類:訪問SQL精簡版的對象從所有活動

public class DatabaseHandler extends SQLiteOpenHelper 

類有這樣的構造:

public DatabaseHandler(Context context) 
{ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

我如何使用這個類從多個activites ?那是通過我的整個應用程序?

當我嘗試從另一個活動實例化類,因爲背景是錯了,它給出了一個錯誤。

什麼是excessing從多個活動分貝的最佳做法?

+0

可能重複http://stackoverflow.com/questions/18595482/do-i-need-to-call-getwritabledatabase-everytime-我操縱數據) –

回答

0

每個活動都應該有自己的SQLiteDatabase實例。

用於在主題的詳細討論,包括例如代碼參見Do I need to call getWritableDatabase() everytime I manipulate data

+0

我如何intantiate SQLiteDatabase,SQLiteOpenHelper對不同的活動?這不會給我一個空指針異常? SQLiteOpenHelper助手; \t \t SQLiteDatabase data = helper.getWritableDatabase(); –

+0

創建一個新的助手實例,然後調用getWritableDatabase()方法。或者,將上下文傳遞給您在創建的助手類中創建的靜態方法,該類也實現了工廠模式。 –

0

採取全球靜態

Utils.class

public static DatabaseHandler data; 

SplashActivity.class

Utils.data=new PortfolioDatabaseManager(getBaseContext()); 

您可以通過訪問像任何一類使用它根據自己的需要: Utils.data

您可以添加getReadDatabase &個getWriteDatabase數據庫類:

public SQLiteDatabase getReadDatabase(Context context){ 

     // create or open the database 
       DatabaseHandler helper = new DatabaseHandler(context); 
       SQLiteDatabase data = helper.getReadableDatabase(); 
     return data; 

    } 

public SQLiteDatabase getWriteDatabase(Context context){ 

     // create or open the database 
       DatabaseHandler helper = new DatabaseHandler(context); 
       SQLiteDatabase data = helper.getWritableDatabase(); 
     return data; 

    } 
0

您可以使用應用程序類擴展該類之後,你可以使用所有的成員和類的功能,從任何活動。您可以讓您的課程成爲Global課程的成員,並在整個應用程序中使用它。

像這樣:

class Global extends Application 
{ 
    ........ 
    ........ 
} 
+0

技術上你可以做到這一點。但是根據操作請求的「最佳實踐」,最好從每個新上下文(活動)的db助手類中獲取一個實例。 –

0

在管理持久性數據,在面向對象的最佳實踐是使用了「網關模式」的。

網關封裝和集中的應用程序數據庫,方便使用。

public class OfflineGateway(){ 
    private static OfflineGateway instance; 
    private Activity activity; 

    private OfflineGateway(){ 
    //some initialization 
    } 

    public static OfflineGateway getInstance(Activity activity){ 
    if(instance == null) 
     instance = new OfflineGateway(); 

    return instance; 
    } 

    //private accessible methods 
    private String getStringData(){ 
    //do something here 
    } 

    private void setStringData(String string){ 
    //do something here 
    } 
} 
[我需要調用getWritableDatabase()每次我操縱數據(的