A. android getContentResolver().query c.moveToFirst() 一直報空指針
可以從你的代碼看到兩個問題
1如果你的contentResolver已經注冊了,這個時候這個段代碼是會有異常的,需要捕獲異常
2你的if語句明顯有問題,你都沒有對cursor做判空,那如果cursor為null的話,你調他的moveToFirst方法和getCount方法肯定是會報空指針的
B. Android資料庫Cursor的問題
如果cursor中只有一行記錄,那麼cursor.moveToNext()為true
如果是多行記錄,那麼while就一直循環下去。不會忽略第一條記錄的
C. android 當cursor為null 用不用關閉
如果已經crusor為null,是不用關閉的,因為已經不佔據資源了,會被回收掉
D. Android Cursor(游標)解析
SQLiteDatabase db = dataBaseHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select *from User",null);
1.游標的行數:int getCount()
2.當前游標的位置:int getPosition()
返回的值從零開始, 當第一次返回行集時游標將位於位置 -1,即第一行之前。在返回最後一行之後,對 next() 的另一個調用將使游標離開最後一個條目,位於 count() 的位置。
3.從當前位置應用的偏移量:boolean move(int offset)
將游標從當前位置向前或向後移動一個相對量。 正偏移向前移動,負偏移向後移動。 如果最終位置在結果集的邊界之外,則結果位置將分別固定為 -1 或 count(),具體取決於該值是在集合的前端還是末尾。如果請求的目的地可達,此方法將返回 true,否則返回 false。
4.將游標移動到絕對位置:boolean moveToPosition(int position)
值的有效范圍是 -1 <= 位置 <= 計數。如果請求目的地可達,此方法將返回 true,否則返回 false。
5.將游標移動到第一行:boolean moveToFirst()
6.將游標移動到最後一行:boolean moveToLast()
7.將游標移動到下一行:boolean moveToNext()
8.將游標移動到上一行:boolean moveToPrevious()
9.返回遊標是否指向第一行:boolean isFirst()
10.返回遊標是否指向最後一行:boolean isLast()
11.返回遊標是否指向第一行之前的位置:boolean isBeforeFirst()
12.返回遊標是否指向最後一行之後的位置:boolean isAfterLast()
13.給定列名的從零開始的列索引,如果列名不存在,則返回 -1:int getColumnIndex(String columnName)
14.給定列名的從零開始的索引,如果該列不存在則拋出非法參數異常:int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException
15.給定的從零開始的列索引處的列名:String getColumnName(int columnIndex)
16.返回一個字元串數組,其中按列在結果中的順序保存結果集中所有列的名稱。:String[] getColumnNames()
17.返回總列數:int getColumnCount()
18.各類型返回值
(1)以位元組數組的形式返回請求列的值:byte[] getBlob(int columnIndex)
(2)以字元串形式返回請求列的值:String getString(int columnIndex)
(3)以整數形式返回請求列的值:int getInt(int columnIndex)
(4)以 long 形式返回請求列的值:long getLong(int columnIndex)
(5)以浮點數形式返回請求列的值:float getFloat(int columnIndex)
(6)以雙精度形式返回請求列的值:double getDouble(int columnIndex)
(7)返回給定列值的數據類型:int getType(int columnIndex)
(8)列值是否為空:boolean isNull(int columnIndex)
(9)以短形式返回請求列的值:short getShort(int columnIndex)
19.檢索請求的列文本並將其存儲在提供的緩沖區中:void StringToBuffer(int columnIndex, CharArrayBuffer buffer)
20.關閉游標:void close()
21.游標是否關閉:boolean isClosed()
22.注冊一個觀察者,當支持此游標的內容發生變化時調用該觀察者:void registerContentObserver(ContentObserver observer)
23.銷毀注冊的觀察者:void unregisterContentObserver(ContentObserver observer)
24.注冊一個觀察者,當數據集的內容發生變化時被調用:void registerDataSetObserver(DataSetObserver observer)
25.銷毀注冊的觀察者:void unregisterDataSetObserver(DataSetObserver observer)
26.注冊以查看內容 URI 的更改。這可以是特定數據行的 URI,也可以是內容類型的通用URI:void setNotificationUri(ContentResolver cr, Uri uri)
cr是上下文,uri是需要觀看的內容
27.是否所有游標移動都應導致調用 onMove():boolean getWantsAllOnMoveCalls()
只有在此方法返回 true 時,才會跨進程調用 onMove()
28.返回一組額外的值:Bundle getExtras()
29.游標用戶與游標通信的帶外方式:Bundle respond(Bundle extras)
30.設置 Bundle 返回的getExtras():void setExtras(Bundle extras)
E. android cursor 怎麼使用
只是把corsor指向的一行傳進去了,需要移動cursor來獲取一列的內容。可以使用while(cursor.movetonext()){}來循環取值