2013-08-03 4 views
1

Это в GraphView.java, который расширяет представление. Я хочу, чтобы при вызове этого invalidate (bounds) вызывался, в то же время он должен вызывать onDraw(). Что такое ошибка в этом коде. Это дает мне это исключение.Android onDraw() не получает вызов по таймеру

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); 
    } 

Любая помощь? пожалуйста!!!

+0

Что имеется в GraphView.java на строке 327? –

+0

@ Mocialov GraphView.java это файл, где я написал этот код. Этот класс extends View – user1844130

+0

отлично! что находится на линии 327? –

ответ

1

попробовать:

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

PostInvalidate:

вызвать Invalidate указанной области должно произойти на последующем цикла через цикл обработки событий.

против

Invalidate:

Если вид видна, OnDraw (android.graphics.Canvas) будет называться в какой-то момент в будущем

Source

+0

Насколько я знаю о postInvalidate(). Он не уверен, когда он снова вызовет onDraw() – user1844130

+0

@ user1844130, вы можете проверить его :) –

+0

@ user1844130 иначе используйте 'yourContextReference.runOnUIThread (новый Runnable (...));' –

0

попробуйте сделать: view.invalidate(); он называет OnDraw (холст холст)

+0

и да .. сделать это в runOnUIThread(); –

+0

@ Abhishek, что здесь представляет объект GraphView? – user1844130

+0

да .. вы забыли сделать это в runOnUIThread(); –

Смежные вопросы