2013-10-18 43 views
0

我試圖從非活動加載SQLite數據庫類傳遞上下文的非活動類的dbHelper在Android的

我需要爲DBHelper適配器類的背景和使用ApplicationContextProvider類概述如下。 (我還沒有將此添加到清單然而由於一些教程建議,因爲我不知道如何)

CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter(ApplicationContextProvider.getContext()); 

應用上下文提供:

package com.example.kuachart; 

import android.app.Application; 
import android.content.Context; 


public class ApplicationContextProvider extends Application { 

/** 
* Keeps a reference of the application context 
*/ 
private static Context sContext; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    sContext = getApplicationContext(); 

} 

/** 
* Returns the application context 
* 
* @return application context 
*/ 
public static Context getContext() { 
    return sContext; 
} 

} 

目前上面的代碼實例myCNYearsAdapter導致程序崩潰所以我不確定應用程序上下文提供程序是否正常工作。有沒有另外一種方法讓上下文傳遞給這個非活動類?

回答

6

必須將它添加到清單,否則ApplicationContextProvider不會被實例化,onCreate()將永遠不會被調用,sContent仍將null

在你清單的application標籤請執行以下操作:

<application 
    android:name="your.package.name.ApplicationContextProvider" 
... 

有另一種方式來獲得傳遞給這個非活動類的背景?

那麼,你總是可以將上下文從活動傳遞給非活動類。

public class NonActivity { 

    private Context mContext; 

    public NonActivity(Context context){ 
     mContext = context; 
    } 

    public void someMethod(){ 
     CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter(mContext); 
     // do something 
    } 

} 

內的活動:

NonActivity na = new NonActivity(this); 
na.someMethod(); 
+0

謝謝:)奏效! – AKTStudios

0

在您創建的活動中添加ApplicationContextProvider aa = new ApplicationContextProvider(this);,您將被要求在ApplicationContextProvider中創建一個簡單的方法,從那裏您可以使用您的Activity's上下文。

0

我在構造函數中注意到,有傳入的一個上下文但沒有訪問,當我需要它更高版本。我添加了一個私有上下文myContext;然後在構造函數中設置它的值。然後,我以後可以用它

public class TaskExpandListAdapter extends SimpleCursorTreeAdapter { 
    private myDBHelper helper; 
    private Context myContext; // define an object instance variable 

    public TaskExpandListAdapter(Context context, Cursor cursor, int groupLayout, 
           String[] groupFrom, int[] groupTo, int childLayout, 
           String[] childFrom, int[] childTo) { 
     super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); 
     myContext = context; // set its value in the constructor 
    } 

    public Cursor fetchChildren(int groupID) { 
     helper = new myDBHelper(myContext); //use it to access sqlite 
     SQLiteDatabase sqlDB = helper.getReadableDatabase(); 

請注意,我試圖從sqlite的表創建可擴展列表視圖

相關問題