2

这里是我尝试访问数据库:安卓:在getWritableDatabase(NullPointerException异常)

UserDataAdapter dbHelper = new UserDataAdapter(this); 
dbHelper.open(); 
dbHelper.createNetwork(network); 
dbHelper.close(); 

UserDataAdapter.java:

public UserDataAdapter open() throws SQLException { 
     dbHelper = new DatabaseHelper(context); // of class DatabaseHelper 
     database = dbHelper.getWritableDatabase(); // this line!! 
     return this; 
    } 

DatabaseHelper.java:

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

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 Desire的
+0

你在哪里实例化UserDataAdapter?你能否包含你实例化这个类的类的代码? @Adil似乎是正确的,你的上下文是无效的。我们只需要明白为什么。 – momo

回答

4

确保,如果你的Context正确设定与否。

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; 
} 
+0

我有相同的代码...上下文设置正确(在调用open()之前进行检查。上下文是FetchNetworks,它扩展了Activity。 –

1

仅供参考:我有一个标准的ContentProvider实现的NullPointerException错误。我终于解决了它,并且密钥与清单文件中的上下文/意图有关。

最后,我从我的清单中的活动中错过了这一行。

<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对我的默认活动进行了测试。

ContentValues values = new ContentValues(); 
values.put("somefieldname","somevalue"); 
values.put("otherfieldname","othervalue"); 
getContentResolver().insert(MyProvider.CONTENT_URI, values); 
0

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

相关问题