2016-07-27 73 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