Google 2016 I/O大會正如火如荼终惑,正好這兩天拿到一部工程機秸抚,就測試一下現(xiàn)有的應用在Android N (Preview 1)上的表現(xiàn)勺届。一上發(fā)現(xiàn)框架部份出問題,整個應用無法正常啟動械拍。
Debug跟蹤了一會突勇,發(fā)現(xiàn)問題竟然出在Cursor.getBlog這個接口上装盯。如下是Android M(6.0.1_r10)的源碼:
/** * Returns the value of the requested column as a byte array. * *
The result and whether this method throws an exception when the
* column value is null or the column type is not a blob type is
* implementation-defined.
*
* @param columnIndex the zero-based index of the target column.
* @return the value of that column as a byte array.
*/
byte[] getBlob(int columnIndex);
在前面的版本如果數(shù)據(jù)表中這項值沒有賦值的話坷虑,getBlob是會返回null的。之前我們的代碼要根據(jù)這個值為null或者返回的byte[]長度為0時重新獲取一次數(shù)據(jù)埂奈,而這次在Android N的手機上發(fā)現(xiàn)迄损,數(shù)據(jù)表中這一項沒有賦值的話,getBlob會返回長度為1的默認byte[](byte[0]的值為0)账磺,從而導致后面重新獲取數(shù)據(jù)的邏輯一直不被執(zhí)行芹敌。