2011年9月7日 星期三

原來Java List類別是Hold住哥

最近Jimmy's papa被List類別搞得快變成卡卡先生,進度一直卡卡卡,原本Jimmy's papa想為android寫個即時動態折線圖(realtime Line Chart),可是事與願違,折線圖永遠只顯示最初的十筆資料,後來發現,原來搗蛋的是List這個Hold住哥

以下是部份程式碼

//dataArraylist存放每條折線的所有資料點的x及y值
private ArrayList<GraphViewData> dataArraylist = new ArrayList<GraphViewData>();
//lineGraphSeries可存放多條折線
private  List<LineGraphViewSeries> lineGraphSeries;

//將dataArraylist塞入exampleSeries
exampleSeries = new GraphViewSeries(dataArraylist);
lineGraphView.addSeries(exampleSeries);

這個Thread會每隔0.5秒寫入一筆資料,填滿十筆資料後再開始顯示折線圖,"理論上"折線圖會一直更新,但"沒有"

runOnUiThread(new Runnable() {
    public void run() {
        dataArraylist.add(new GraphViewData(
            0.5 * (dataArraylist.size()+1),pressure_value));                
            if(dataArraylist.size()>10)
                {
                    drawLineGraph();
                }
            }

最後Jimmy's papa的解法是,每次update UI之前就將折線物件清掉

lineGraphSeries.clear();

然後再次執行

exampleSeries = new GraphViewSeries(dataArraylist);
lineGraphView.addSeries(exampleSeries);

就OK了

ps.Jimmy's papa懷疑這是否是因為ArrayList的某些內部資料成員被設為final的關係?

沒有留言:

張貼留言