将Context传递给SQLiteOpenHelper

时间:2012-10-11 23:07:08

标签: android sqliteopenhelper

首先,我是Android应用程序的新手,并没有独立工作。我处理这个问题时,我的队友已经接受了设计,并要求我设置数据库以及执行此操作的方法等等。

所以虽然大多数情况似乎都没问题,但我提出:

Context context = null;
DataBaseHelper drinksDataBase = new DataBaseHelper(context); 

进入他的主要活动。

构造函数如下:

public DataBaseHelper(Context  context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
    try{
        createDataBase();
    }
    catch(IOException e){

    }
}

忽略null,我假设是应用程序崩溃的当前原因,我将如何获取应用程序的正确上下文,以便我可以使我的数据库工作?

它实际上似乎在this.getReadableDatabase()崩溃,所以不管是否为空上下文,我不知道。

由于以下原因,Logcat无法启动:

[2012-10-12 10:37:57 - Unexpected error while launching logcat. Try reselecting the device.] device not found
com.android.ddmlib.AdbCommandRejectedException: device not found
    at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:752)
    at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:373)
    at com.android.ddmlib.Device.executeShellCommand(Device.java:462)
    at com.android.ddmuilib.logcat.LogCatReceiver$1.run(LogCatReceiver.java:109)
    at java.lang.Thread.run(Unknown Source)  

提前致谢,

詹姆斯

2 个答案:

答案 0 :(得分:15)

这是我通常做的事情:

 public class MyApplication extends Application {
    private static MyApplication  instance;
    public MyApplication()
    {
       instance = this;
    }
    public static Context getContext()
    {
       return instance;
    } 

然后将该类设置为清单

 <application
        android:name="my.workspace.MyApplication"
...
 >

之后,只需拨打MyApplication.getContext(),即可。

答案 1 :(得分:3)

如果你正在使用eclipse,那就超出了孩子的游戏范围。只需在“私有上下文上下文”某处创建一个字段,然后从源选项卡中的字段生成构造函数。只是为你吐出来。然后当你需要创建一个类的实例。通常参数中的“this”就足够了

修改


我希望这有帮助,我宁愿不在这里延长讨论时间。 在您的数据库中:

public DataBaseHelper(Context  context) {
    super(context, DB_NAME, null, 1);
}

public Cursor getDrinks() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(DB_NAME, null, null, null, null, null, null);
        return cursor;
    }

然后在你的活动中(在oncreate中):

private Cursor c;

...
DataBaseHelper drinksDataBase = new DataBaseHelper(this);
c = drinksDataBase.getDrinks(); 
c.moveToFirst();