1

在我的活动中,我有一个名为“senzosv”的 TextView。我希望它显示我的光传感器的当前值。我有以下代码。

public class Osvetlenie extends Activity implements OnItemSelectedListener, OnSeekBarChangeListener, SensorEventListener  {


SensorManager sm;
Sensor proxSensor;
Sensor lighhtSens;
TextView tv = (TextView)findViewById(R.id.senzosv);

这是在我的 onCreate 中:

 ...
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
    proxSensor =sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    lighhtSens = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
    sm.registerListener(this, proxSensor, SensorManager.SENSOR_DELAY_NORMAL);
    sm.registerListener(this, lighhtSens, SensorManager.SENSOR_DELAY_NORMAL);

这里是 onSensorChanged 和 onAccuracyChanged 方法

 public void onSensorChanged(SensorEvent event) 
{
if( event.sensor.getType() == Sensor.TYPE_LIGHT)
    {
    tv.setText("value: " + event.values[0] + " lux" );   
    Toast.makeText(getApplicationContext(),"On SensorChanged"+ event.values[0],Toast.LENGTH_SHORT).show();

    }

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

    Log.d(ACCESSIBILITY_SERVICE,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
    if(sensor.getType() == Sensor.TYPE_LIGHT){
        Log.i("Sensor Changed", "Accuracy :" + accuracy);
       }

}

当我运行我的应用程序并尝试启动此活动时,我在 LogCat 中收到 nullpointexception 和错误消息:应用程序意外关闭 我正在三星 Galaxy S II (GT-I9100) 上测试我的应用程序我做错了什么?谢谢 :)

4

3 回答 3

0

做这个

tv = (TextView)findViewById(R.id.senzosv);

setContentView()

于 2013-03-10T10:48:58.557 回答
0

您必须调用setContentView(R.layout.layout_main);,因为它设置了活动布局,然后获取 textview 参考。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_main);
    tv = (TextView)findViewById(R.id.senzosv);
}

光传感器是否只能返回值 1000、100 和 10?

直接从系统设备文件中获取值

Scanner st = new Scanner(new File("/sys/devices/virtual/lightsensor/switch_cmd/lightsensor_file_state"));
int lux = st.nextInt();
st.close();
于 2013-03-10T10:50:17.040 回答
0

findViewById拥有之后才能使用setContentView

即移到onCreate之后setContentView

TextView tv;

public void onCreate(Bundle b){
   super.onCreate(b);
   setContentView(R.layout.activity_main);

   tv = (TextView) findViewById(R.id.senzosv);

}

如果您更仔细地阅读 LogCat,它将解释您的代码的哪一行导致 NullPointer,您可以更轻松地调试它。


您还需要清单中的权限才能使用传感器。

于 2013-03-10T10:50:33.423 回答