0

このコードで何が悪いのかわかりません。加速度計のデータを取得しようとしていますが、デバイスで実行しようとすると、メッセージが表示され、そのプロセスがシャットダウンされました。

public class SensorActivity extends Activity implements SensorEventListener {   
SensorManager sm;
Sensor sensor ;
TextView yViewA = null;
TextView zViewA = null;
TextView xViewO = null;
TextView yViewO = null;
TextView zViewO = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


 sm = (SensorManager)getSystemService(SENSOR_SERVICE);
 sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 xViewA = (TextView) findViewById(R.id.xbox);
 yViewA = (TextView) findViewById(R.id.ybox);
 zViewA = (TextView) findViewById(R.id.zbox);
 xViewO = (TextView) findViewById(R.id.xboxo);
 yViewO = (TextView) findViewById(R.id.yboxo);
 zViewO = (TextView) findViewById(R.id.zboxo);


}    

@Override
protected void onResume() {
    super.onResume();
    sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
    sm.unregisterListener(this);
    super.onStop();
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}

public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub  

    xViewO.setText("Orientation X: " + event.values[0]);
    yViewO.setText("Orientation Y: " + event.values[1]);
    zViewO.setText("Orientation Z: " + event.values[2]);

} 

UPD:

05-18 19:42:17.570: E/AndroidRuntime(14875): android.app.SuperNotCalledException: Activity {daler.sensor/daler.sensor.SensorActivity} did not call through to super.onCreate()

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1933)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.app.ActivityThread.access$600(ActivityThread.java:127)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.os.Handler.dispatchMessage(Handler.java:99)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.os.Looper.loop(Looper.java:137)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at android.app.ActivityThread.main(ActivityThread.java:4441)

05-18 19:42:17.570: E/AndroidRuntime(14875):    at java.lang.reflect.Method.invokeNative(Native Method)

UPD2:コードが更新されましたが、まだ問題が発生しています。UPD3:ログ猫が更新されました

UPD4:コードを更新しましたが、動作するようになりました。多分誰かがそれを必要とするでしょう。ありがとう。

4

2 に答える 2

3

findViewById(R.id.xbox);クラスの体に入れることはできません。onCreate()後に行く必要がありsetContentView()ます。

問題はコードの18行目にあります(logcatによる)。それはおそらくこれです:

Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

次のように記述 SensorManager sm; しているため、センサーマネージャーはnullであるため、で使用することはできませんsm.getDefaultSensor()

センサーマネージャーを初期化する方法については、次のリンクを参照してください。

 public SensorActivity() {
     sm = (SensorManager)getSystemService(SENSOR_SERVICE);
     sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 }
于 2012-05-18T13:30:30.293 に答える
1

onCreate()で、これら6つのfindViewByIdステートメントすべてから最初のTextViewを削除してみてください。

から変更する

TextView xViewA = (TextView) findViewById(R.id.xbox);

xViewA = (TextView) findViewById(R.id.xbox);

編集:

public class SensorActivity extends Activity implements SensorEventListener {

SensorManager sm;
Sensor sensor; 
TextView xViewA = null;
TextView yViewA = null;
TextView zViewA = null;
TextView xViewO = null;
TextView yViewO = null;
TextView zViewO = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 sm = (SensorManager)getSystemService(SENSOR_SERVICE);
 sensor= sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);

 xViewA = (TextView) findViewById(R.id.xbox);
 yViewA = (TextView) findViewById(R.id.ybox);
 zViewA = (TextView) findViewById(R.id.zbox);
 xViewO = (TextView) findViewById(R.id.xboxo);
 yViewO = (TextView) findViewById(R.id.yboxo);
 zViewO = (TextView) findViewById(R.id.zboxo);

 setContentView(R.layout.main);

}
..
于 2012-05-18T14:15:02.727 に答える