我正在从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
如果植物表为空,则代码将失败。 –