2015-11-19 77 views
1

設定軸界限時,我收到以下錯誤:NullPointerException異常上GraphView

java.lang.NullPointerException: Attempt to invoke interface method 'double com.jjoe64.graphview.series.DataPointInterface.getX()' on a null object reference

當我嘗試設置x和y軸的界限在我的圖形視圖。

graph = (GraphView) findViewById(R.id.session_graph); 

    graph.getViewport().setXAxisBoundsManual(true); // These lines seem to be causing it 
    graph.getViewport().setMinX(1); 
    graph.getViewport().setMaxX(50); 

    graph.getViewport().setYAxisBoundsManual(true); // These lines seem to be causing it 
    graph.getViewport().setMinY(2.0); 
    graph.getViewport().setMaxY(15.0); 

當我註釋掉setX/YBoundsManual()線,它運行沒有錯誤,但範圍不改變,雖然圖中正常工作。什麼可能導致這個?

+0

我們沒有足夠的信息來幫助我們。請添加完整的堆棧跟蹤,或者如果您懷疑這是您正在使用的圖庫中的錯誤,則可以使用它們提交錯誤報告。 –

+0

嘗試在最小和最大X/Y之後設置X/Y邊界。 – George

+2

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -我修復它) –

回答

0

我解決了這個問題,使用一些數據更新同一GraphView中的所有數據系列。舉例來說,我開始了一系列的數據是這樣的:

graphData = new LineGraphSeries<DataPoint>(); 
graphDataRemote = new LineGraphSeries<DataPoint>(); 
GraphView graph = new GraphView(this); 
graph.addSeries(graphData); 
graph.addSeries(graphDataRemote); 
graph.getViewport().setMaxY(graphMaxY); 
graph.getViewport().setMaxX(graphMaxX); 
... 

,並更新一個數據系列的時候,我也更新其他:

graphData.appendData(new DataPoint(x, newvalue), true, graphMaxX); 
graphDataRemote.appendData(new DataPoint(x, 0), true, graphMaxX); 
x++; 

我希望這可以解決您的問題。

1

我解決了這個問題。 在我的情況下,當你從1 設定最低x的範圍和數據點的數組長度小於1

例如

// list.size() return null 
// for example, no data from Sqlite is assigned to the list 
// cus query return nothing. 

DataPoint [] statsArray = new DataPoint[list.size()]; 
LineGraphSeries<DataPoint> series = new LineGraphSeries<>(statsArray); 

// set manual X bounds 
    graph.getViewport().setXAxisBoundsManual(true); 
    graph.getViewport().setMinX(1.0); //when 0 it work, just show nothing. 
// when statsArray is null and you try setMinX(1.0) you get this error. 
    graph.getViewport().setMaxX(list.size()); 

所以我SOLUTION

.DataPointInterface.getX()

正在發生對此問題是:

List<Integer> list = DatabaseObject.someQuery("SOME EXAMPLE QUERY"); 
DataPoint [] statsArray; 
    if(list.size() > 0) { 
     // Code for list longer than 0, query return something 
     statsArray = new DataPoint[list.size()]; // so this is not null now 
     for (int i = 0; i < statsArray.length; i++) { 
      statsArray[i] = new DataPoint(i+1, list.get(i)); 
      // i+1 to start from x = 1 
     } 
    }else{ 
     // Query return nothing, so we add some fake point 
     // IT WON'T BE VISIBLE cus we starts graph from 1 
     statsArray = new DataPoint[] {new DataPoint(0, 0)}; 
    } 

    GraphView graph = (GraphView) findViewById(R.id.graph); 
    LineGraphSeries<DataPoint> series = new LineGraphSeries<>(statsArray); 
    // set manual X bounds 
    graph.getViewport().setXAxisBoundsManual(true); 
    graph.getViewport().setMinX(1.0); 
    graph.getViewport().setMaxX(list.size()); 

所以現在我們的代碼不會生成。

NullPointerException when setting axis bounds on GraphView

這就像,當你從0創建圖形時,null是「ok」。 當您從1創建圖形時,null不正確。

我知道這不是最好的解決方案,但它可能有助於某人。

相關問題