在我的Activity.onCreate()
中我撥打AsyncQueryHandler.startQuery()
,它返回一個有效的Cursor
,我用它來填充SimpleCursorAdapter
。但按下主頁按鈕,然後通過onRestart()
再次啓動我的應用程序,我做同樣的查詢,但我得到以下Exception
。爲什麼在Activity.onRestart()之後SQLiteQueryBuilder在computeProjection()中拋出一個NullPointerException異常?
W/System.err(29512): java.lang.NullPointerException
W/System.err(29512): at android.database.sqlite.SQLiteQueryBuilder.computeProjection(SQLiteQueryBuilder.java:516)
W/System.err(29512): at android.database.sqlite.SQLiteQueryBuilder.buildQuery(SQLiteQueryBuilder.java:370)
W/System.err(29512): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:323)
W/System.err(29512): at com.voidgroup.attention.data.EntryDatabase.query(EntryDatabase.java:177)
W/System.err(29512): at com.voidgroup.attention.data.EntryDatabase.getNotes(EntryDatabase.java:100)
W/System.err(29512): at com.voidgroup.attention.data.AttentionProvider.query(AttentionProvider.java:114)
W/System.err(29512): at android.content.ContentProvider$Transport.query(ContentProvider.java:163)
W/System.err(29512): at android.content.ContentResolver.query(ContentResolver.java:245)
W/System.err(29512): at android.content.AsyncQueryHandler$WorkerHandler.handleMessage(AsyncQueryHandler.java:79)
W/System.err(29512): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(29512): at android.os.Looper.loop(Looper.java:123)
W/System.err(29512): at android.os.HandlerThread.run(HandlerThread.java:60)
我ContentProvider
在其onCreate()
創建一個包裝類EntryDatabase如下
@Override
public boolean onCreate() {
db = new EntryDatabase(getContext());
return true;
}
而且EntryDatabase構造是這樣
public EntryDatabase(Context context) {
helper = new EntrySQLiteHelper(context);
}
EntryDatabase.query建立之後基本上做到這一點SQLiteQueryBuilder
cursor = qb.query(helper.getReadableDatabase(), columns, selection, selectionArgs, null, null, sortOrder, lim);