1

私の活動では、「senzosv」という TextView が 1 つあります。光センサーからの現在の値を表示したい。次のコードがあります。

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 が表示され、エラー メッセージ: アプリケーションが予期せず閉じられました。 Samsung 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);アクティビティレイアウトを設定してからテキストビュー参照を取得するため、呼び出す必要があります。

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 に答える