2013-08-03 5 views
1

Ceci est dans GraphView.java qui étend View. Je veux que quand cet invalidate (bounds) soit appelé, en même temps il devrait appeler onDraw() .. Qu'est-ce qu'un bogue dans ce code. C'est en me donnant cette exception.Android onDraw() ne se fait pas appeler Minuteur

01-01 00:45:42.813: E/AndroidRuntime(1586): FATAL EXCEPTION: Timer-2 
01-01 00:45:42.813: E/AndroidRuntime(1586): java.lang.NullPointerException 
    01-01 00:45:42.813: E/AndroidRuntime(1586):  at   android.view.View.invalidate(View.java:8467) 
    01-01 00:45:42.813: E/AndroidRuntime(1586):  at  com.cdl.mircam.GraphView$1.run(GraphView.java:327) 
01-01 00:45:42.813: E/AndroidRuntime(1586): at java.util.Timer$TimerImpl.run(Timer.java:284) 
@Override 
public void onDraw(Canvas c) 
    { 
     super.onDraw(c); 
     drawStuff(c); 
    } 


public void drawStuff(Canvas canvas) 
    {  
    try 
    { 
     PlotRealTimeGraph(canvas); 
     bounds = new Rect(chanX_count1+0, 0, chanX_count1+5, graphheight); 
     canvas.drawRect(bounds,myPaint); 
     } 
    catch(Exception e1) 
    { 
    e1.printStackTrace(); 
    } 
    } 


    public void InvalidatePlotRealTimeGraph() 
    { 
     Timer t = new Timer(); 
     t.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() 
     { 
      invalidate(bounds); 
     }  
     },1000,40); 
    } 

Toute aide? S'il vous plaît!!!

+0

Qu'y a-t-il dans GraphView.java à la ligne 327? –

+0

@ Mocialov GraphView.java est le fichier où j'ai écrit ce code.Cette classe s'étend Voir – user1844130

+0

génial! ce qui est à la ligne 327? –

Répondre

1

try:

if(bounds != null) 
    postInvalidate (leftOfYourBoundsObject, topOfYourBoundsObject, rightOfYourBoundsObject, bottomOfYourBoundsObject); 

PostInvalidate:

cause un invalidate de la zone spécifiée se produise sur un cycle ultérieur dans la boucle d'événements.

vs

Invalider:

Si la vue est visible, onDraw (android.graphics.Canvas) sera appelé à un moment donné dans le futur

Source

+0

Autant que je sache sur postInvalidate(). Il n'est pas sûr quand il appellera onDraw() à nouveau – user1844130

+0

@ user1844130 vous pouvez le tester :) –

+0

@ user1844130 sinon utilisez 'yourContextReference.runOnUIThread (new Runnable (...));' –

0

essayez de faire: view.invalidate(); il appelle onDraw (de toile de toile)

+0

et oui .. le faire dans runOnUIThread(); –

+0

@ Abhishek ce qui est vue ici objet de GraphView est-il? – user1844130

+0

oui .. vous avez oublié de le faire dans runOnUIThread(); –

Questions connexes