Android Kotlin - 被捕异常仍然崩溃程序

问题描述 投票:1回答:1

码:

  viewModel.saveLayer.observeNonNull(this) {
        Log.i(TAG, "save layer")
        try {
            // starting to record takes longer than stopping. so, if timed right, a recorder could be stopped
            // before started.
            with(mediaRecorder) {
                stop()
                reset()
            }
            sharedPrefs.updateNumSavedLayers(it)
            viewModel.updateNumSavedLayers(it)
        } catch(e: Exception) {
            Log.e(TAG,"could not save layer", e)
        }
    }

崩溃仍然被抛出。见下文:

2019-02-20 19:45:22.514 22435-22435 / com.xxx.xxx E / PedalApp:无法保存图层java.lang.RuntimeException:停止失败。在com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 6.invoke(PedalActivity.kt:92)的android.media.MediaRecorder.stop(Native Method)com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 6.invoke(PedalActivity.kt: 17)在android.arch.lifecycle.LiveData.dispatchingValue的com.androidchekhov.looperpedal.ExtensionsKt $ observeNonNull $ 1.onChanged(Extensions.kt:9)android.arch.lifecycle.LiveData.considerNotify(LiveData.java:109) LiveData.java:126)在android.arch.lifecycle.LiveData.setValue(LiveData.java:282)的android.arch.lifecycle.MutableLiveData.setValue(MutableLiveData.java:33)at com.xxx.xxx.PedalViewModel.pedalClick (PedalViewModel.kt:47)at com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 11.invoke(PedalActivity.kt:137)at com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 11.invoke(PedalActivity.kt:17)at com。在com.androidchekhov.looperpedal.OnPedalTouchListener.onTouch(OnPedalListe)的androidchekhov.looperpedal.OnPedalTouchListener.handleClick(OnPedalListener.kt:80) ner.kt:41)在android.view.View.View.St.Ev上调查android.view.View.St.EvatchTouchEvent(ViewGroup.java:297),在android.view.View.DvatchTouchEvent(ViewGroup.java:2671) )在android.view.View.View.View.St上的android.view.View.View.St.EvatchTransformedTouchEvent(ViewGroup.java:2971)的android.view.View.View.View.StartEvent(ViewGroup.java:2671)上的android.view.View.View。 .ViewGroup.dispatchTouchEvent(ViewGroup.java:2600)位于android.view.View.View.StartEvent(ViewGroup.java:2971),位于android.view.ViewGroup.dispatchTransformedTouchEvent的android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) ViewGroup.java:2971)位于android.view.View.View.StartEvent(ViewGroup.java:2671)的android.view.View.St.Ev上的android.view.View.St.EvatchTouchEvent(ViewGroup.java:2671) )在com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView) .java:448)位于android.app.Activity.dispatchTouchEvent(Activity.java:3312)的com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1834),位于android.support.v7.view.WindowCallbackWrapper。 dispatchTouchEvent(WindowCallbackWrapper.java:69)位于android.view.ViewRootImpl的android.view.View.dispatchPointerEvent(View.java:12018)的com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:410)$ ViewPostImeInputStage android.view.ViewRootImpl $。在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4643)上的.processPointerEvent(ViewRootImpl.java:4643)在android.view.ViewRootImpl $。在Android.view.ViewRootImpl $上的$ InputStage.deliver(ViewRootImpl.java:4181) android.view.ViewRootImpl上的android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4200)中的InputStage.onDeliverToNext(ViewRootImpl.java:4234)位于android.view.ViewRootImpl的android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:4327) android.view.ViewRootImpl $ AsyncInputStage.ap上的$ InputStage.apply(ViewRootImpl.java:4208)在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4181)的android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4234)android.view.ViewRootImpl $ InputStage的ply(ViewRootImpl.java:4384) .forward(ViewRootImpl.java:4200)在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4208)的android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4181)在android.view.ViewRootImpl。在android.view.ViewRootImpl.doProcessInputEvent(ViewRootImpl.java:6694)的android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl)的android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6694)中的deliverInputEvent(ViewRootImpl.java:6755) .java:6858)在android.view.InputEventReceiver.dispatchInputEvent(在android.os.MessageQueue.nativePollOnce(Native Method)的InputEventReceiver.java:193

android exception mediarecorder failed-installation
1个回答
1
投票

不确定我是否误解了您的问题,但以下行表明您看到的异常是由您自己的代码打印的:

Log.e(TAG,"could not save layer", e)

如果您提供Log.e命令的例外,它将与您的消息一起打印(请参阅documentation):

Send a ERROR log message and log the exception.

请注意,您的消息“无法保存图层”也会显示。所以你只看到一个打印的堆栈跟踪,但异常被正确捕获,因此不会使你的应用程序崩溃。也许后续问题是导致崩溃的原因。

请(1)提供有关应用程序的更多上下文,以及(2)检查是否存在其他崩溃指示符,例如您可以共享的logcat。根据您提供的信息,我认为还有另一个崩溃,实际上撕毁了应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.