2011-03-12 14 views
0

在我的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); 

回答

0

從Android源文件我檢查NullPointerExceptioncomputeProjection是因爲投影字符串數組有一個空單元格。我試圖通過在執行連接操作時添加表名來巧妙地修復由用戶給出的列。這很好,只要我給列數組作爲new String[] { },但後來我改爲使用static final String[]所以第一次調用ContentResolver查詢成功,但第二個使用修改後的表名「常量」,從而打破了我的查詢。

相關問題