Я уверен, что это ошибка, потому что я не полностью понимаю темы, но здесь идет ...Android NullPointerException в Runnable во второй раз
У меня есть работоспособный, который запускается, когда onCreate()
вызывается в метод:
@Override
protected void onCreate(Bundle savedInstanceState) {
//Set all app specific starting points here
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_avatar);
...
soundMeterLoop();
}
public void soundMeterLoop() {
Log.d("SpeechKit", "Start Sound Meter");
soundMeterHandler = new Handler();
soundMeterRunnable = new Runnable() {
@Override
public void run() {
if(!soundMeter.SoundMeterRunning) {
Log.d("SpeechKit", "Start SoundMeter in the runnable");
startSoundMeter();
}
if (soundMeter.mMediaRecorder != null) {
amplitude = soundMeter.getAmplitude();
decibelLevelOutput.setText("" + amplitude);
if (amplitude > threshold) {
decibelLevelOutput.setTextColor(Color.RED);
Log.d("SpeechKit", "Interrupt and run startNuance()");
startNuance();
} else {
decibelLevelOutput.setTextColor(Color.BLACK);
Log.d("SpeechKit", "Running");
soundMeterHandler.postDelayed(this, 100);
}
}
}
};
soundMeterHandler.postDelayed(soundMeterRunnable, 100);
}
Это работает просто отлично, когда он создал в onCreate
. Как вы можете видеть, он убивает себя (не обновляя цикл, если заявление не работает) и запускает startNuance()
.
public void startNuance() {
soundMeterHandler.removeCallbacksAndMessages(soundMeterRunnable);
nuance.toggleReco();
}
Затем я убиваю runnable и запускаю метод в другом классе. Этот класс работает нормально, а затем, когда он закончил делать свое дело, я перезвоню к этому основному классу с avatar.stopNuance();
Это в классе Nuance.java
@Override
public void onFinishedRecording(Transaction transaction) {
Log.d("SpeechKit", "onFinishedRecording");
//We have finished recording the users voice.
//We should update our state and stop polling their volume.
state = State.PROCESSING;
stopAudioLevelPoll();
avatar.stopNuance(); // <<<<<
}
Затем он возвращается к моей основной деятельности (avatar
) и работает этот метод stopNuance()
:
public void stopNuance() {
Log.d("SpeechKit", "stopNuance(), start loop again");
soundMeterLoop();
}
Затем он пытается выполнить ту же петлю из ранее. Только на этот раз я получаю много ошибок, относящихся к nullpointer excceptions. в частности, начиная с decibelLevelOutput.setText("" + amplitude);
Я не уверен, почему эти вещи являются нулевыми или как их исправить. Это потому, что он начал новый поток, который не был запущен при создании runnable?
что тип переменной 'nuance'? я также переименовал бы 'avatar' в' avatarActivity', поэтому более очевидно, что вы общаетесь с – Blundell
. 'nuance' ссылается на класс' Nuance'. Это хороший звонок на аватаре. Активация – ntgCleaner