Android中SQLite构造函数参数Context的几点注意事项(3)

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.avin.android"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".SqliteActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

源代码如上面贴出来的,在SQLiteActivity的OnCreate方法中初始化DBHelper的对象,把SQLiteActivity.this作为Oncreate的参数Context传递进去,能正确初始化,

在我的项目中(要用到SQLite)的项目中,我把一个DBHelper封装进另外一个SQLiteOperator中使用,类似在DAO中使用数据库的链接一样,因为DBHelper的构造参数需要一个context类型的参数,问题就是这个Context类型的参数到底是谁的引用,开始我把这个SQLiteOperator(继承自Activity)传递给DBHelper的构造参数

DBHelper helper = new DBHelper(SqliteOperator.this,"sqlite.db"); 这样不行,报错 NullPointerException,后来我对照上面那个能正常运行的SQLite的初始化过程,发现上面的Context是一个能够正常显示的Activity,也就是说,DBHelper的构造方法使在SQLiteActivity的onCreate()方法中被调用的,而我这个报错的Activity并没用在它的onCreate()方法调用DBHelper的构造方法,所以我把SQLiteOperator添加了onCreate方法,然后仿照上面那样,调用DBHelper的构造,传递SQLiteOperator.this当做Context,不行,还是空指针!

没办法,自习对比发现,是不是DBHelper的构造必须要在一个能显示的Activity的onCreate中调用才可以! 我在我的MainActivity的onCreate()方法中传递MainActivity.this当做Context来初始化DBHelper的对象,搞定!

总结:Android项目中实现SQLiteOpenHelper的那个类的初始化必须在一个能正常显示的Activity的OnCreate方法中调用,而且,必须要用这个Activity的this引用当做Context才能正常构建SQLite数据库,这个Contex即使是一个Activity但是在程序中没用界面,也不能把这个Activity的引用当做Context来构建数据库,这样只会报莫名的空指针!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0c32c1b00ed9335ffedb49afdf42422d.html