2016-07-27 90 views
0

专家,如何在内部静态类中使用类成员?

我想绘制图表每10秒。下面的代码结构应该清楚。问题是:

我不能在内部类PlotHandler中使用外部类成员sDtdChart,因为内部类是静态的。我该怎么办?

如果不是静态的,我得到警告:这个Handler类应该是静态的或者可能发生泄漏。

谢谢。

public class MainActivity extends Activity { 
    Timer timer = new Timer(); 
    ScatterChart sDtdChart; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     timer.schedule(task, 0, 10 * 1000); 
    } 

    // plot chart 
    TimerTask task = new TimerTask() { 
     public void run() { 
      Message msg = new Message(); 
      msg.what = 1; 
      plotHandler.sendMessage(msg); 
     } 
    }; 

    Handler plotHandler = new PlotHandler(); 

    private static class PlotHandler extends Handler { 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
       case 1: 
        plotChart(); 
        break; 
      } 
      super.handleMessage(msg); 
     } 

     void plotChart() { 
     // it says non-static field cannot be referenced in a static context 
     sDtdChart = (ScatterChart) findViewById(R.id.chartDtd); 
     sDtdChart.setDescription("dtd"); 
     sDtdChart.setData(xxxxx); 
     sDtdChart.invalidate(); 
    } 
} 
+0

为什么要在活动中保留一个静态内部类? – Shaishav

+0

我不想,但如果不是静态的,我得到了一个警告泄漏可能会发生,我很害怕。 – caibirdcnb

+0

使您正在使用的成员静态'静态ScatterChart sDtdChart;' –

回答

0

您是否尝试过类似

public class MainClass { 

    public static void main(String[] args){ 

     System.out.println(StaticNestedClass.age); 
    } 

    static class StaticNestedClass { 
     static int age = 10; 
    } 

} 
0

静态嵌套类不能直接引用在其外部类中定义的实例变量或方法:它只能通过一个对象引用中使用它们。

Check this link

+0

我想我明白这一点。问题是我该怎么做?如果它不警告我可能会发生泄漏,我很好在内部类中使用非静态。但我不想要警告。 – caibirdcnb