Hallo Androidentwickler,
ich arbeite mich derzeit mit Android Studio in die Android- und Java-Programmierung ein und beschäftige mich aktuell mit den Sensoren.
Dabei bin ich auf folgenden Java-Code gestoßen, den ich in Android Studio zu Testzwecken übernommen habe:
https://software.intel.com/de-…tom-based-android-tablets
(Code-Beispiel 2-2)
Beim Kompilieren bekomme ich folgende Fehlermeldung:
Error:(21, 9) error: constructor SensorDialog in class SensorDialog cannot be applied to given types;
required: Context,Sensor
found: Context
reason: actual and formal argument lists differ in length
Der Kompilierfehler bezieht sich auf den SensorDialog-Konstruktor in der SensorDialog-Klasse:
public class SensorDialog extends Dialog implements SensorEventListener {
Sensor mSensor;
TextView mDataTxt;
private SensorManager mSensorManager;
public SensorDialog(Context ctx, Sensor sensor) {
this(ctx);
mSensor = sensor;
}
Ich habe mich mit den Zeilen nun mehrere Stunden auseinandergesetzt und kann hoffentlich auch Tippfehler ausschließen.
Daher möchte ich folgende Fragen gerne in diesem Forum stellen:
Hauptfrage:
Warum findet der Compiler den Sensor-Wert nicht? So wie ich den Code lese wird der Wert sensor mit dem vorher als Sensor deklarierten Wert mSensor bedient.
Zusatzfrage:
Was wird in diesem Fall konkret mit dem Befehl this(ctx) zurückgegeben? So wie ich es aus der Oracle-Java-Hilfe herauslese, wird der this-Befehl in einem Konstruktor verwendet um auf andere Konstruktoren in derselben Klasse zu verweisen. Aus den Erläuterungen zu Context auf der developers.android-Seite kann ich nicht erkennen welche konkreten Werte hier ausgelesen werden und warum diese hier überhaupt notwendig sind.
Es würde mich freuen, wenn mir jemand bei der Lösung dieses Problems ein paar Tipps geben könnte.
Viele Grüße
AirDevil
Hier noch der Vollständigkeit halber der komplette Quellcode aus Android Studio zum Abgleich mit der Website-Version von Intel:
package com.xxx.test_sensorvalueslist;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Dialog;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class SensorDialog extends Dialog implements SensorEventListener {
Sensor mSensor;
TextView mDataTxt;
private SensorManager mSensorManager;
public SensorDialog(Context ctx, Sensor sensor) {
this(ctx);
mSensor = sensor;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
mDataTxt.setText("...");
setTitle(mSensor.getName());
}
@Override
protected void onStart() {
super.onStart();
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onStop() {
super.onStop();
mSensorManager.unregisterListener(this, mSensor);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != mSensor.getType()) {
return;
}
StringBuilder dataStrBuilder = new StringBuilder();
if ((event.sensor.getType() == Sensor.TYPE_LIGHT)||
(event.sensor.getType() == Sensor.TYPE_TEMPERATURE)) {
dataStrBuilder.append(String.format("Data: %.3fn", event.values[0]));
}
else{
dataStrBuilder.append(
String.format("Data: %.3f, %.3f, %.3fn",
event.values[0], event.values[1], event.values[2]));
}
mDataTxt.setText(dataStrBuilder.toString());
}
}
Alles anzeigen