2013-07-20 10 views
2

Iam試圖在我的sqlite數據庫中查找列的平均值。 下面是代碼:將SQLite光標中的值賦給變量

public void getAvgMileage(Prediction pd) 
    { 

    String [] columns = new String[]{KEY_ROW_ID, KEY_KM, KEY_FUEL_QTY, KEY_FUEL_PRICE, KEY_TOTAL_COST, KEY_MILEAGE, KEY_DATE,KEY_TANK_FULL}; 
    predictionCursor = ourDatabase.rawQuery("SELECT AVG(_mileage) FROM fuel_table WHERE _mileage IS NOT NULL ORDER BY _id DESC LIMIT 5", null); 
       predictionCursor.moveToFirst(); 
       if(predictionCursor!=null && predictionCursor.getCount()>0) 
       { 
        predictionCursor.moveToLast(); 
        findAvgMileage = (Double.valueOf(predictionCursor.toString())); 
        pd.setpredictionMileage(findAvgMileage); 
       } 
} 

但是蔭歌廳一個NullPointerException。 任何幫助? 謝謝。

回答

0

它看起來並不像你走出光標的價值爲你的SQL記錄

這條線:

findAvgMileage = (Double.valueOf(predictionCursor.toString())); 

看起來像它試圖採取了toString的雙重價值( )的實際光標 - 我認爲這不會是可用的,或者至少不能解析爲Double。 Cursor.toString()的返回值可能是空值。

替換爲以下行:

findAvgMileage = predictionCursor.getDouble(0); 

這個新的生產線將在您的SQL應該是你想要的平均值curosr的當前位置的第一列取出來的值。

+0

YOu是對的,我擺脫了空指針異常,但仍然得到了錯誤的答案 –

+0

這是一個正確的方向邁出的一步!你的SQL或數據本身將是錯誤價值的罪魁禍首。 avg()函數將只使用非空值,它也將任何不是數字的東西(即文本或斑點)等同爲零,這會導致平均值。試試「從fuel_table選擇AVG(_mileage)」作爲你的SQL,看看你是否得到了不同的值。 – jsrsoftware

+0

感謝您的幫助,也感謝您投入解釋概念的時間。這對我今後肯定會有幫助。我認爲我的數據本身存在一些問題。我試圖弄明白。再次感謝很多。 –