コールバックをOkHttp
から受け取った後に、uiアクションを実行すると、これはexception
になります。コールバック後にOkHttpディスパッチャーで致命的な例外を回避する方法
致命的な例外:OkHttpディスパッチャ プロセス:org.example.verificationserviceexample、PID:20421 android.util.AndroidRuntimeException:アニメーターのみValueAnimator(android.animation.ValueAnimator.cancelで ルーパースレッド上で実行されてもよいです。 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.RippleDrawable.setBackgroundActive(RippleDrawable.java:100)の は、android.graphics.drawable.RippleComponent.enterので、android.graphics.drawable.RippleDrawable.treeBackgroundEnter(RippleDrawable.java:552)の にあります。 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.support.v7.widget.AppCompatButtoの とandroid.widget.TextView.drawableStateChanged(TextView.java:4090) n.drawableStateChanged(AppCompatButton.java:155)android.view.View.refreshDrawableState(View.java:18115)で android.view.View.setEnabled(View.java:8135)で android.widget.TextViewで 。 org.example.verificationserviceexample.MainActivity.renderButtons(MainActivity.java:146)com.bssysでorg.example.verificationserviceexample.MainActivity.onAudioStateChanged(MainActivity.java:170)で で(TextView.java:1609) setEnabled。 spitchmobilesdk.audio.SpitchAudioManager.publishAudioStateChange(SpitchAudioManager.java:123) at com.bssys.spitchmobilesdk.audio.SpitchAudioManager.stopAudio(SpitchAudioManager.java:83)(VerificationService.java:57) at com.bssys.spitchmobilesdk.VerificationService.stopEnrollment okhttp3でcom.bssys.spitchmobilesdk.VerificationService $ 1.onFailureでorg.example.verificationserviceexample.MainActivity $$ラムダ$ 3.onSpitchResult(不明なソース) (VerificationService.java:111) で$ MainActivity(MainActivity.java:60) .RealCall $ AsyncCall.execute(RealCall.java:161) at 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(スレッド。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);
}
を、私は、オーディオデータを事前に
感謝をRequestBodyを移入するOkIoパイプを使用しています!
あなたは完全に正しいです!私はその問題に悩まされ、OkHttpがAndroidライブラリではなくJavaライブラリであることを完全に忘れてしまった。ご協力いただきありがとうございます!! – miibpa