在Activity.onCreate()
我致电AsyncQueryHandler.startQuery()
并返回有效的Cursor
,我用它来填充SimpleCursorAdapter
。但是在按下主页按钮,然后通过onRestart()
再次启动我的应用程序后,我执行相同的查询,但是我得到以下Exception
。
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 :(得分:0)
在Android源代码中,我检查了NullPointerException
中的computeProjection
是因为投影字符串数组有一个空单元格。我试图通过在执行连接操作时添加表名来聪明并修复用户给出的列。只要我将columns数组作为new String[] { }
给出,这很好,但后来我改为使用static final String[]
,所以先调用ContentResolver
查询成功,但第二次使用修改后的表名“不断”因此打破了我的疑问。