android的数据库帮助类getWritableDatabase,空指针错误

xxxxsong 2018-04-03 11:26:48

DBHelp

public class DbHelper extends SQLiteOpenHelper {

private final static String DB_NAME = "HKC";

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

@Override
public void onCreate(SQLiteDatabase db) {
//创建了一个名为person的表
String sql = "CREATE TABLE product_info(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"iccid varchar(10)," +
"name varchar(50)," +
"directions varchar(100)," +
"type varchar(1)," +
"price varchar(10)," +
"old_price varchar(10))";
db.execSQL(sql);
Log.d("SQLiteDatabaseTest", sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}


MainActivity 代码

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

DbHelper dbHelper=new DbHelper(this);
SQLiteDatabase db=dbHelper.getWritableDatabase();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClick(View view) {
switch (view.getId()) {
case R.id.insert:
break;
case R.id.select:
break;
}
}
}

异常
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
...全文
1025 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxxxsong 2018-04-03
  • 打赏
  • 举报
回复
为什么会在getWritableDatabase处报异常呢,查了有一会都没解决 请教一下各位
xxxxsong 2018-04-03
  • 打赏
  • 举报
回复
引用 3 楼 xj396282771 的回复:
或者你自己断点看下。你这样写 断点看到ContextWrapper为null 你的写法: 我的写法:
ok了
Jing丶無雙 2018-04-03
  • 打赏
  • 举报
回复
或者你自己断点看下。你这样写 断点看到ContextWrapper为null
你的写法:

我的写法:
Jing丶無雙 2018-04-03
  • 打赏
  • 举报
回复
这样就行了,原因new DbHelper(this)这里的this在onCreate的时候才会被创建
public class MainActivity extends Activity {
 
    private static final String TAG = "MainActivity";
 
    DbHelper dbHelper;
    SQLiteDatabase db;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DbHelper(this);
        db = dbHelper.getWritableDatabase();
    }
 
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.insert:
                break;
            case R.id.select:
                break;
        }
    }
}

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧