2013-10-12 87 views
2

你能解釋一下,爲什麼我得到0.0值,當我收到時,例如從其他類的5中獲得5值?從其他類中的一個類獲取非靜態值

public class PSLServiceMain extends Activity implements SensorEventListener { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
      PSLService LightSensorValue = new PSLService(); 
      LightSensorValue.LightSensor = 5; 
      ......................... 
     } 
    } 


    @SuppressLint("Wakelock") 
    public class PSLService extends Service { 
    ............ 
     float LightSensor; 
     ............. 
    } 
} 

這是我的問題的一小部分代碼。

編輯

是的,我們對此深感抱歉不好解釋。 因此,我想在我的主類PSLServiceMain中獲取光傳感器值,並將其發送給PSLService。 問題是,當一個變量是靜態的,它的值被髮送到另一個類的權利。而當它不是靜態的(例如),我得到0.0

+0

使用綁定服務。 –

+0

5僅供測試。非靜態變量也顯示爲0.0( – Anton

+0

)將'5'值賦予'onCreate'中的'LightSensorValue.LightSensor'後,該實例的字段值爲5.在您執行相同操作之前,其他任何實例的值都不會變爲 –

回答

1

你的問題是什麼,你認爲你想實現這一行...

PSLService LightSensorValue = new PSLService(); 

版本的Android Service是一種特殊情況下的Java並且您不使用new創建Service - 相反,您需要使用startService(...),此時系統將爲您創建Service,並調用將Service設置爲運行狀態所需的各種生命週期方法。

重點是 - 您不應該試圖直接操作Service中的變量。如果您需要將某種數據傳遞給Service,您應該這樣做,因爲Intent中的附加信息用於啓動Service

或者,也可以綁定到一個Service並調用使用返回的IBinder接口的方法,當你綁定到Service

編輯:您可以看到如何在範圍,實例和實例字段閱讀了文檔Extending the Binder class

+0

Snx爲了很好的解釋,你可以添加一些使用'IBinder'的代碼嗎? – Anton

+0

@Anton:查看我在答案結尾作爲修改發佈的鏈接。 – Squonk

相關問題