首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓: NullPointerException on getWritableDatabase()

安卓: NullPointerException on getWritableDatabase()
EN

Stack Overflow用户
提问于 2011-09-13 08:22:05
回答 3查看 9.1K关注 0票数 2

这里是我试图访问数据库的地方:

代码语言:javascript
复制
UserDataAdapter dbHelper = new UserDataAdapter(this);
dbHelper.open();
dbHelper.createNetwork(network);
dbHelper.close();

UserDataAdapter.java:

代码语言:javascript
复制
public UserDataAdapter open() throws SQLException {
        dbHelper = new DatabaseHelper(context); // of class DatabaseHelper
        database = dbHelper.getWritableDatabase(); // this line!!   
        return this;
    }

DatabaseHelper.java:

代码语言:javascript
复制
public DatabaseHelper(Context context) {
        super(context, Defines.DATABASE_NAME, null, Defines.DATABASE_VERSION);
    }

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(Defines.DATABASE_CREATE_TAXI_SERVICE_DATABASE);
    }

坠机时间: 09-13 18:12:33.119: E

代码语言:javascript
复制
RROR/AndroidRuntime(7488): FATAL EXCEPTION: main
09-13 18:12:33.119: ERROR/AndroidRuntime(7488): java.lang.NullPointerException
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.database.UserDataAdapter.open(UserDataAdapter.java:29)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks.addToDatabase(FetchNetworks.java:107)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks.access$1(FetchNetworks.java:105)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.FetchNetworks$1.onResponseReceived(FetchNetworks.java:75)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.basind.testapp.async.CallbackWrapper.run(CallbackWrapper.java:15)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Handler.handleCallback(Handler.java:587)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.os.Looper.loop(Looper.java:145)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at android.app.ActivityThread.main(ActivityThread.java:4937)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at java.lang.reflect.Method.invokeNative(Native Method)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at java.lang.reflect.Method.invoke(Method.java:521)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):     at dalvik.system.NativeStart.main(Native Method)

其他详情:

  • 目标:android-7
  • 测试设备: HTC愿望
EN

回答 3

Stack Overflow用户

发布于 2011-09-13 08:51:22

确保您的Context是否被正确设置。

代码语言:javascript
复制
private Context context;
private SQLiteDatabase database;
private DatabaseHelper dbHelper;

public UserDataAdapter(Context context) {
    this.context = context;
}

public UserDataAdapter open() throws SQLException
{
    dbHelper = new DatabaseHelper(context);
    database = dbHelper.getWritableDatabase();
    return this;
}
票数 4
EN

Stack Overflow用户

发布于 2012-04-23 05:23:44

FYI:我在标准的NullPointerException实现中遇到了ContentProvider错误。我最终解决了它,密钥与清单文件中的上下文/意图相关。

最后,我从我的舱单活动中错过了这条线。

代码语言:javascript
复制
<data android:mimeType="vnd.android.cursor.dir/vnd.pmp.smsmessage" />

请查看NotePad示例以了解我所说的内容。另外,我更喜欢在这里使用http://www.vogella.com/articles/AndroidSQLite/article.html结构,但是,由于他的tut是为3.0设计的,所以必须省略2.2实现中的所有加载程序。

把它放在我创建的数据库中之后,我可以插入行。我简单地使用onCreate对我的默认活动进行了测试。

代码语言:javascript
复制
ContentValues values = new ContentValues();
values.put("somefieldname","somevalue");
values.put("otherfieldname","othervalue");
getContentResolver().insert(MyProvider.CONTENT_URI, values);
票数 1
EN

Stack Overflow用户

发布于 2015-02-17 20:24:25

当您试图从服务或活动构造函数打开数据库时,就会发生这种情况。尝试将open移动到onCreate()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7398802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档