我正在從SQLite數據庫讀取數據,表面上正確打開。但是,當我試圖比較我從中抽取的兩個對象的標題時,我得到一個空指針異常,這表明讀取過程如何寫入。當然 - 當我評論比較部分(這將按名稱按字母順序排列植物列表)時,應用程序將運行,但視圖中的所有數據字段顯示爲'null'。我已經多次查看代碼,並且假設我必須做一些邏輯上錯誤的事情,那就是另一組眼睛可能能夠檢測到。打開+讀取與SQLite數據庫,但獲得空值?
這裏是logcat的輸出與堆棧跟蹤:
[ 12-03 10:16:57.563 5898:0x1714 E/AndroidRuntime ]
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.NullPointerException
at net.xxx.wildedibles.full.intro.LoadingFragment$LoadingTask$1.compare(LoadingFragment.java:101)
at net.xxx.wildedibles.full.intro.LoadingFragment$LoadingTask$1.compare(LoadingFragment.java:99)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:320)
at java.util.TimSort.sort(TimSort.java:199)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2090)
at java.util.Collections.sort(Collections.java:1965)
at net.xxx.wildedibles.full.intro.LoadingFragment$LoadingTask.doInBackground(LoadingFragment.java:99)
at net.xxx.wildedibles.full.intro.LoadingFragment$LoadingTask.doInBackground(LoadingFragment.java:68)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
這是LoadingFragment的相關部分:
Plant plant = new Plant();
GlobalData.plantArray = plant.populatePlantDataFromDB(mDbHelper);
Collections.sort(GlobalData.plantArray , new Comparator<Plant>(){
public int compare(Plant plant1, Plant plant2) {
return plant1.getTitle().compareToIgnoreCase(plant2.getTitle());
}
});
這是植物類的相關部分:
//Population method to read from DB
public List<Plant> populatePlantDataFromDB(DBAdapter mDbHelper){
List<Plant> plantsList = new ArrayList<Plant>();
String selectQuery = "SELECT * FROM plants";
Cursor c = mDbHelper.getData(selectQuery);
// looping through all rows and adding to list
c.moveToFirst();
do {
Plant plant = new Plant();
plant.setId(c.getInt((c.getColumnIndex("id"))));
plant.setTitle((c.getString(c.getColumnIndex("title"))));
plant.setScientificName((c.getString(c.getColumnIndex("scientificName"))));
//many, many fields
plantsList.add(plant);
} while (c.moveToNext());
c.close();
return plantsList;
}
對不起,如果代碼間距有點古怪,但你可以看到這裏發生了什麼。
非常感謝您能告訴我的任何事情!
調試時,你的'GlobalData.plantArray'中有什麼? – Szymon
看起來像數據庫中的列是空的。你檢查過了嗎? – njzk2
如果植物表爲空,則代碼將失敗。 –