声音级别应用程序中的java.lang.RuntimeException错误
我需要你的帮助。我写了一个应用程序,显示传感器的结果和测量噪声水平,但我总是得到例外,我无法找到这个问题的根源。也许你能找到什么 以下是LogCat日志:声音级别应用程序中的java.lang.RuntimeException错误,java,android,exception,runtimeexception,Java,Android,Exception,Runtimeexception,我需要你的帮助。我写了一个应用程序,显示传感器的结果和测量噪声水平,但我总是得到例外,我无法找到这个问题的根源。也许你能找到什么 以下是LogCat日志: 02-09 19:44:29.815: E/AndroidRuntime(10167): FATAL EXCEPTION: main 02-09 19:44:29.815: E/AndroidRuntime(10167): Process: com.example.spn_senros, PID: 10167 02-09 19:44:29.8
02-09 19:44:29.815: E/AndroidRuntime(10167): FATAL EXCEPTION: main
02-09 19:44:29.815: E/AndroidRuntime(10167): Process: com.example.spn_senros, PID: 10167
02-09 19:44:29.815: E/AndroidRuntime(10167): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.spn_senros/com.example.spn_senros.MainActivity}: java.lang.NullPointerException
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread.access$900(ActivityThread.java:172)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.os.Handler.dispatchMessage(Handler.java:102)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.os.Looper.loop(Looper.java:146)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread.main(ActivityThread.java:5653)
02-09 19:44:29.815: E/AndroidRuntime(10167): at java.lang.reflect.Method.invokeNative(Native Method)
02-09 19:44:29.815: E/AndroidRuntime(10167): at java.lang.reflect.Method.invoke(Method.java:515)
02-09 19:44:29.815: E/AndroidRuntime(10167): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
02-09 19:44:29.815: E/AndroidRuntime(10167): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
02-09 19:44:29.815: E/AndroidRuntime(10167): at dalvik.system.NativeStart.main(Native Method)
02-09 19:44:29.815: E/AndroidRuntime(10167): Caused by: java.lang.NullPointerException
02-09 19:44:29.815: E/AndroidRuntime(10167): at com.example.spn_senros.MainActivity.onCreate(MainActivity.java:118)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.Activity.performCreate(Activity.java:5539)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
02-09 19:44:29.815: E/AndroidRuntime(10167): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368)
02-09 19:44:29.815: E/AndroidRuntime(10167): ... 11 more
和源代码:
public class MainActivity extends Activity implements EventListener, StepCounterListener, LinearAccListener, StepDetectorListener, LightSensorListener, PressureSensorListener, GravitySensorListener, RotationVectorListener, RelativeHumidityListener, ProximitySensorListener, TempSensorListener, AccelerometerSensorListener, GyroSensorListener, MagSensorListener {
private TextView lightText, pressureText, signText, noiseText, humidityText, linearAccText, proximityText, tempText, accelText, gyroText, magText, rotationText, gravityText, stepDetectorText, stepCounterText;
private LightSensor mLightSensor;
private PressureSensor mPressureSensor;
private RelativeHumiditySensor mRelativeHumidity;
private ProximitySensor mProximitySensor;
private TemperatureSensor mTempSensor;
private AccelerometerSensor mAccelSensor;
private GyroscopeSensor mGyroSensor;
private MagnetometerSensor mMagSensor;
private RotationSensor mRotSensor;
private GravitySensor mGravitySensor;
private StepCounterSensor mStepCounter;
private StepDetectorSensor mStepDetector;
private LinearAccelerometer mLinearAcc;
private NoiseLevel mNoise;
public double amp;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lightText = (TextView)findViewById(R.id.rLight);
pressureText = (TextView)findViewById(R.id.rPressure);
humidityText = (TextView)findViewById(R.id.rHumidity);
proximityText = (TextView)findViewById(R.id.rProximity);
tempText = (TextView)findViewById(R.id.rTemp);
accelText = (TextView)findViewById(R.id.rAccel);
gyroText = (TextView)findViewById(R.id.rGyro);
magText = (TextView)findViewById(R.id.rMag);
rotationText = (TextView)findViewById(R.id.rRotation);
gravityText = (TextView)findViewById(R.id.rGravity);
stepCounterText = (TextView)findViewById(R.id.rSCounter);
stepDetectorText = (TextView)findViewById(R.id.rSDetector);
linearAccText = (TextView)findViewById(R.id.rLinearAcc);
signText = (TextView)findViewById(R.id.rSignMotion);
noiseText = (TextView)findViewById(R.id.rNoise);
//SOUND LEVEL CODE:
mNoise = new NoiseLevel();
try {
mNoise.start();
Toast.makeText(getBaseContext(), "Sound sensor initiated.", Toast.LENGTH_SHORT).show();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final Runnable r = new Runnable() {
public void run() {
//mSensor.start();
//Log.d("Amplify","HERE");
Toast.makeText(getBaseContext(), "Working!", Toast.LENGTH_LONG).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
// Get the volume from 0 to 255 in 'int'
double volume = 10 * mNoise.getTheAmplitude() / 32768;
int volumeToSend = (int) volume;
noiseText.setText("Volume: " + String.valueOf(volumeToSend));
handler.postDelayed(this, 250); // amount of delay between every cycle of volume level detection + sending the data out
}
});
}
};
handler.postDelayed(r, 250);
mLightSensor = new LightSensor(getBaseContext());
mLightSensor.setListener(this);
mPressureSensor = new PressureSensor(getBaseContext());
mPressureSensor.setListener(this);
mRelativeHumidity = new RelativeHumiditySensor(getBaseContext());
mRelativeHumidity.setListener(this);
mProximitySensor = new ProximitySensor(getBaseContext());
mProximitySensor.setListener(this);
mTempSensor = new TemperatureSensor(getBaseContext());
mTempSensor.setListener((TempSensorListener) this);
mAccelSensor = new AccelerometerSensor(getBaseContext());
mAccelSensor.setListener(this);
mGyroSensor = new GyroscopeSensor(getBaseContext());
mGyroSensor.setListener(this);
mMagSensor = new MagnetometerSensor(getBaseContext());
mMagSensor.setListener(this);
mRotSensor = new RotationSensor(getBaseContext());
mRotSensor.setListener(this);
mGravitySensor = new GravitySensor(getBaseContext());
mGravitySensor.setListener(this);
mStepCounter = new StepCounterSensor(getBaseContext());
mStepCounter.setListener(this);
mStepDetector = new StepDetectorSensor(getBaseContext());
mStepDetector.setListener(this);
mLinearAcc = new LinearAccelerometer(getBaseContext());
mLinearAcc.setListener(this);
}
public void onLightSensorChanged(int lux){
lightText.setText("LIGHT level: " + lux + " lx");
}
public void onPressureSensorChanged(BigDecimal pressure){
pressureText.setText("\nPRESSURE: " + pressure + " mPa ");
}
public void onRelativeHumidityChanged(String humidity) {
humidityText.setText("\nRELATIVE HUMIDITY: " + humidity);
}
public void onProximitySensorChanged(int proximity) {
proximityText.setText("\nPROXIMITY: " + proximity);
}
public void onTempSensorChanged(String temperature) {
tempText.setText("\nAMBIENT TEMPERATURE :" + temperature + " celcius degree");
}
public void onAccelSensorChanged(BigDecimal axisX, BigDecimal axisY, BigDecimal axisZ) {
accelText.setText("\nACCELEROMETER: \nX: " + axisX + "nm/s^2 || Y: " + axisY + "nm/s^2 || Z: " + axisZ +"nm/s^2");
}
public void onGyroSensorChanged(BigDecimal axisX, BigDecimal axisY, BigDecimal axisZ) {
gyroText.setText("\nGYROSCOPE: \nX: " + axisX + "nrad/s || Y: " + axisY + "nrad/s || Z: " + axisZ + "nrad/s");
}
public void onMagSensorChanged(BigDecimal axisX, BigDecimal axisY, BigDecimal axisZ) {
magText.setText("\nMAGNETOMETER: \nX: " + axisX + " piko Tesla || Y: " + axisY + " piko Tesla || Z: " + axisZ + " piko Tesla");
}
public void onRotationVectorChanged(BigDecimal rot1, BigDecimal rot2, BigDecimal rot3) {
rotationText.setText("\nROTATION VECTOR: \nYaw: " + rot1 + " nrad || Pitch: " + rot2 + " nrad || Roll: " + rot3 + " nrad");
}
public void onGravitySensorChanged(BigDecimal gravity1, BigDecimal gravity2, BigDecimal gravity3) {
gravityText.setText("\nGRAVITY: \nX: " + gravity1 + "nm/s^2 || Y: " + gravity2 + "nm/s^2 || Z: " + gravity3 + "nm/s^2");
}
public void onStepCounterChanged(int step) {
stepCounterText.setText("\nSTEP CONTER: " + step + " steps");
}
public void onStepDetectorChanged(String step) {
stepDetectorText.setText("\nSTEP DETECTOR: " + step);
}
public void onLinearAccChanged(BigDecimal axisX, BigDecimal axisY, BigDecimal axisZ) {
linearAccText.setText("\nLINEAR ACCELERATION: \nX: " + axisX + "nm/s^2 || Y: " + axisY + "nm/s^2 || Z: " + axisZ + "nm/s^2");
}
@Override
protected void onResume() {
super.onStart();
// Sound based code
try {
mNoise.start();
Toast.makeText(getBaseContext(), "Sound sensor initiated.", Toast.LENGTH_SHORT).show();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Toast.makeText(getBaseContext(), "On resume, sound sensor messed up...", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
if(!mLightSensor.register()){
lightText.setText("\nLight sensor not supported!");
// Toast.makeText(this, "Light sensor not supported!", Toast.LENGTH_SHORT).show();
}
if(!mPressureSensor.register()){
pressureText.setText("\nPressure sensor not supported!");
}
if(!mRelativeHumidity.register()){
humidityText.setText("\nRelative humidity sensor not supported!");
}
if(!mProximitySensor.register()){
proximityText.setText("\nProximity sensor not supported!");
}
if(!mTempSensor.register()){
tempText.setText("\nAmbient temperature sensor not supported!");
}
if(!mAccelSensor.register()){
accelText.setText("\nAccelerometer sensor not supported!");
}
if(!mGyroSensor.register()){
gyroText.setText("\nGyroscope sensor not supported!");
}
if(!mMagSensor.register()){
magText.setText("\nMagnetometer sensor not supported!");
}
if(!mRotSensor.register()){
rotationText.setText("\nRotation Vector sensor not supported!");
}
if(!mGravitySensor.register()){
gravityText.setText("\nGravity sensor not supported!");
}
if(!mStepCounter.register()){
stepCounterText.setText("\nStep counter sensor not supported!");
}
if(!mStepDetector.register()){
stepDetectorText.setText("\nStep detector sensor not supported!");
}
if(!mLinearAcc.register()) {
linearAccText.setText("\nLinear accelerometer not supported!");
}
// if(!mSignMotion.register()) {
// signText.setText("Significant motion sensor not supported!");
// }
}
@Override
protected void onPause() {
super.onStop();
// mNoise.stop();
mLightSensor.unregister();
mPressureSensor.unregister();
mRelativeHumidity.unregister();
mProximitySensor.unregister();
mTempSensor.unregister();
mAccelSensor.unregister();
mGyroSensor.unregister();
mMagSensor.unregister();
mRotSensor.unregister();
mGravitySensor.unregister();
mStepCounter.unregister();
mStepDetector.unregister();
// mLinearAcc.unregister();
// mSignMotion.unregister();
}
private void start() throws IllegalStateException, IOException {
mNoise.start();
}
private void stop() {
mNoise.stop();
}
private void sleep() {
mNoise.stop();
}
}
请帮助我理解我做错了什么 哪一行是:com.example.spn_senros.MainActivity.onCreate(MainActivity.java:118)handler.postDelayed(r,250);似乎没有正确设置处理程序,因为在运行该行代码时它是空的。您有什么建议我应该如何处理它吗?我已经有一段时间没有完成Android开发了。不记得处理程序的生命周期是如何设置的,或者是如何设置的。可能是,或者会提供一个答案。