【发布时间】:2018-05-15 20:40:29
【问题描述】:
在收到来自OkHttp 的回调后执行 ui 操作时,我收到此 exception。
致命异常:OkHttp 调度程序 进程:org.example.verificationserviceexample,PID:20421 android.util.AndroidRuntimeException:动画器只能在 Looper 线程上运行 在 android.animation.ValueAnimator.cancel(ValueAnimator.java:1020) 在 android.animation.AnimatorSet.cancel(AnimatorSet.java:366) 在 android.graphics.drawable.RippleComponent.cancelSoftwareAnimations(RippleComponent.java:214) 在 android.graphics.drawable.RippleComponent.cancel(RippleComponent.java:133) 在 android.graphics.drawable.RippleComponent.enter(RippleComponent.java:100) 在 android.graphics.drawable.RippleDrawable.tryBackgroundEnter(RippleDrawable.java:552) 在 android.graphics.drawable.RippleDrawable.setBackgroundActive(RippleDrawable.java:290) 在 android.graphics.drawable.RippleDrawable.onStateChange(RippleDrawable.java:270) 在 android.graphics.drawable.Drawable.setState(Drawable.java:735) 在 android.view.View.drawableStateChanged(View.java:18046) 在 android.widget.TextView.drawableStateChanged(TextView.java:4090) 在 android.support.v7.widget.AppCompatButton.drawableStateChanged(AppCompatButton.java:155) 在 android.view.View.refreshDrawableState(View.java:18115) 在 android.view.View.setEnabled(View.java:8135) 在 android.widget.TextView.setEnabled(TextView.java:1609) 在 org.example.verificationserviceexample.MainActivity.renderButtons(MainActivity.java:146) 在 org.example.verificationserviceexample.MainActivity.onAudioStateChanged(MainActivity.java:170) 在 com.bssys.spitchmobilesdk.audio.SpitchAudioManager.publishAudioStateChange(SpitchAudioManager.java:123) 在 com.bssys.spitchmobilesdk.audio.SpitchAudioManager.stopAudio(SpitchAudioManager.java:83) 在 com.bssys.spitchmobilesdk.VerificationService.stopAudio(VerificationService.java:96) 在 com.bssys.spitchmobilesdk.VerificationService.stopEnrollment(VerificationService.java:57) 在 org.example.verificationserviceexample.MainActivity.lambda$null$0$MainActivity(MainActivity.java:60) 在 org.example.verificationserviceexample.MainActivity$$Lambda$3.onSpitchResult(未知来源) 在 com.bssys.spitchmobilesdk.VerificationService$1.onFailure(VerificationService.java:111) 在 okhttp3.RealCall$AsyncCall.execute(RealCall.java:161) 在 okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)
这是我正在使用的代码:
public void addVoicePrintFromSource(Pipe source, SpitchConfig config, @NonNull String speakerId, Callback callback){
RequestBody requestBody = new RequestBody() {
@Override
public MediaType contentType() {
return MediaType.parse("audio/x-pcm; rate="+config.getRate());
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeAll(source.source());
}
};
Request request = new Request.Builder()
.url(config.getServerURL())
.addHeader("Accept","*/*")
.addHeader("Connection","Keep-Alive")
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(callback);
}
我正在使用 OkIo 管道用音频数据填充 RequestBody
提前致谢!
【问题讨论】: