【问题标题】:android: light sensor nullPointerExceptionandroid: 光传感器 nullPointerException
【发布时间】:2013-03-10 10:47:46
【问题描述】:

在我的活动中,我有一个名为“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) 上测试我的应用程序 我做错了什么?谢谢:)

【问题讨论】:

    标签: android nullpointerexception sensors android-sensors light


    【解决方案1】:

    这样做

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

    setContentView()之后

    【讨论】:

    • 谢谢。现在效果很好。我还有一个问题。光传感器是否只能返回值 1000、100 和 10?或者它可以更准确吗?谢谢
    【解决方案2】:

    只有在拥有setContentView 之后才能使用findViewById

    即在setContentView 之后将其移至onCreate

    TextView tv;
    
    public void onCreate(Bundle b){
       super.onCreate(b);
       setContentView(R.layout.activity_main);
    
       tv = (TextView) findViewById(R.id.senzosv);
    
    }
    

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


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

    【讨论】:

    • 有没有办法让我的光传感器更准确?它只显示 10、100 或 1000 个值。
    【解决方案3】:

    您必须调用setContentView(R.layout.layout_main);,因为它设置了活动布局然后获取文本视图引用。

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

    【讨论】:

    • 谢谢,但如果我想实时读取该值,我应该把这段代码放在哪里?
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多