java 抛出空指针,getWritableDatabase()抛出空指针异常

I have a service class having following code -

public class ReminderService extends WakeReminderIntentService{

private static final String TAG ="ReminderService";

private TasksDBAdapter dbHelper;

public ReminderService(){

super("ReminderService");

dbHelper = new TasksDBAdapter(this);

dbHelper.open(); //THIS LINE GIVES ERROR

}

code for TasksDBAdapter open() method is as -

public TasksDBAdapter(Context ctx) {

this.mCtx = ctx;

}

public TasksDBAdapter open() throws android.database.SQLException {

mDbHelper = new DatabaseHelper(mCtx);

Log.i(TAG, "mDbHelper in open method-->" + mDbHelper);

mDb = mDbHelper.getWritableDatabase(); // ACTUAL ERROR LINE

return this;

}

the log value receives address which means mDbHelper gets initialized properly.Log.i gives -

11-01 23:32:32.004: I/TasksDBAdapter(681): mDbHelper in open method-->ray.kaushik.simple.task.manager.TasksDBAdapter$DatabaseHelper@411e7a10

but

mDb = mDbHelper.getWritableDatabase();

throws the null pointer error.

Logcat gives -

11-01 23:32:32.043: E/AndroidRuntime(681): FATAL EXCEPTION: main

11-01 23:32:32.043: E/AndroidRuntime(681): java.lang.RuntimeException: Unable to instantiate service ray.kaushik.simple.task.manager.ReminderService: java.lang.NullPointerException

11-01 23:32:32.043: E/AndroidRuntime(681): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2347)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.app.ActivityThread.access$1600(ActivityThread.java:130)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.os.Handler.dispatchMessage(Handler.java:99)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.os.Looper.loop(Looper.java:137)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.app.ActivityThread.main(ActivityThread.java:4745)

11-01 23:32:32.043: E/AndroidRuntime(681): at java.lang.reflect.Method.invokeNative(Native Method)

11-01 23:32:32.043: E/AndroidRuntime(681): at java.lang.reflect.Method.invoke(Method.java:511)

11-01 23:32:32.043: E/AndroidRuntime(681): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)

11-01 23:32:32.043: E/AndroidRuntime(681): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

11-01 23:32:32.043: E/AndroidRuntime(681): at dalvik.system.NativeStart.main(Native Method)

11-01 23:32:32.043: E/AndroidRuntime(681): Caused by: java.lang.NullPointerException

11-01 23:32:32.043: E/AndroidRuntime(681): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)

11-01 23:32:32.043: E/AndroidRuntime(681): at ray.kaushik.simple.task.manager.TasksDBAdapter.open(TasksDBAdapter.java:38)

11-01 23:32:32.043: E/AndroidRuntime(681): at ray.kaushik.simple.task.manager.ReminderService.(ReminderService.java:16)

11-01 23:32:32.043: E/AndroidRuntime(681): at java.lang.Class.newInstanceImpl(Native Method)

11-01 23:32:32.043: E/AndroidRuntime(681): at java.lang.Class.newInstance(Class.java:1319)

11-01 23:32:32.043: E/AndroidRuntime(681): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2344)

11-01 23:32:32.043: E/AndroidRuntime(681): ... 10 more

My databaseHelper class code -

private static class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(DATABASE_CREATE);

}

@Override

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

}

}

where DATABASE_NAME and all others have been defined globally -

private static final String DATABASE_NAME = "data";

private static final String DATABASE_TABLE = "reminders";

private static final int DATABASE_VERSION = 1;

public static final String KEY_TITLE = "title";

public static final String KEY_BODY = "body";

public static final String KEY_DATE_TIME = "reminder_date_time";

public static final String KEY_ROWID = "_id";

private static final String TAG = "TasksDBAdapter";

can anyone please provide some pointers.. thanks in advance..!!!

解决方案

I believe the IntentService hasn't been fully initialized when you try to create the database in the constructor. Try moving your code into onHandleIntent():

protected void onHandleIntent(Intent intent) {

dbHelper = new TasksDBAdapter(this);

dbHelper.open();

// Do something

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值