0

我正在尝试从非活动类加载 SQLite 数据库

我需要DBHelperAdapter 类的上下文并使用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程序的行使程序崩溃,因此我不确定应用程序上下文提供程序是否正常工作。还有另一种方法可以将上下文传递给这个非活动类吗?

4

3 回答 3

6

必须将其添加到清单中,否则ApplicationContextProvider将不会被实例化,onCreate()永远不会被调用并且sContent会保留null

在清单的application标签中执行以下操作:

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

还有另一种方法可以将上下文传递给这个非活动类吗?

好吧,您总是可以将 Context 从 Activity 传递给非 Activity 类。

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();
于 2013-10-18T22:23:33.387 回答
0

从您创建的位置添加ApplicationContextProvider aa = new ApplicationContextProvider(this);您的活动,您将被要求在其中创建一个简单的方法ApplicationContextProvider,从那里您可以使用您的Activity's上下文。

于 2013-10-18T22:17:33.390 回答
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 表创建一个可扩展的列表视图

于 2015-06-26T00:57:48.183 回答