【问题标题】:how to catch fatal exceptions in flutter如何在颤动中捕获致命异常
【发布时间】:2020-05-15 18:07:18
【问题描述】:

我从android抛出了以下异常(或者它可以从ios抛出,没关系),我无法捕获它以避免应用程序崩溃。有解决办法吗?

  > [ +276 ms] E/AndroidRuntime( 9658): FATAL EXCEPTION: Thread-2 [       
    > ] E/AndroidRuntime( 9658): Process: com.example.myonpu, PID: 9658 [   
    > ] E/AndroidRuntime( 9658):
    > com.microsoft.identity.client.exception.MsalClientException:
    > Connection is not available to refresh token [        ]
    > E/AndroidRuntime( 9658):  at
    > com.microsoft.identity.client.internal.controllers.MsalExceptionAdapter.msalExceptionFromBaseException(MsalExceptionAdapter.java:49)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.client.PublicClientApplication$9.onError(PublicClientApplication.java:1621)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.common.internal.controllers.ApiDispatcher$4$1.run(ApiDispatcher.java:424)
    > [        ] E/AndroidRuntime( 9658):   at
    > android.os.Handler.handleCallback(Handler.java:751) [        ]
    > E/AndroidRuntime( 9658):  at
    > android.os.Handler.dispatchMessage(Handler.java:95) [        ]
    > E/AndroidRuntime( 9658):  at android.os.Looper.loop(Looper.java:154) [
    > ] E/AndroidRuntime( 9658):    at
    > android.app.ActivityThread.main(ActivityThread.java:6682) [        ]
    > E/AndroidRuntime( 9658):  at java.lang.reflect.Method.invoke(Native
    > Method) [        ] E/AndroidRuntime( 9658):   at
    > com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) [       
    > ] E/AndroidRuntime( 9658): Caused by:
    > com.microsoft.identity.common.exception.ClientException: Connection is
    > not available to refresh token [        ] E/AndroidRuntime( 9658):    at
    > com.microsoft.identity.common.adal.internal.net.HttpWebRequest.throwIfNetworkNotAvailable(HttpWebRequest.java:201)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.common.internal.controllers.BaseController.performSilentTokenRequest(BaseController.java:328)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.common.internal.controllers.BaseController.renewAccessToken(BaseController.java:204)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.client.internal.controllers.LocalMSALController.acquireTokenSilent(LocalMSALController.java:252)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.common.internal.controllers.TokenCommand.execute(TokenCommand.java:89)
    > [        ] E/AndroidRuntime( 9658):   at
    > com.microsoft.identity.common.internal.controllers.ApiDispatcher$4.run(ApiDispatcher.java:401)
    > [        ] E/AndroidRuntime( 9658):   at
    > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    > [        ] E/AndroidRuntime( 9658):   at
    > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    > [        ] E/AndroidRuntime( 9658):   at
    > java.lang.Thread.run(Thread.java:762)

我不需要捕捉这个异常,而是捕捉这样的“致命异常”。我为 Future 尝试了 try/catch 和 catchError,但没有任何办法。

也试过 FlutterError.onError 这种方式:

mymethod() async{
  await methodWhichCanThrowException();
  FlutterError.onError = (details) {
    FlutterError.dumpErrorToConsole(details);
  };
  ...
}

如果它可以帮助这里是我使用的 msal_flutter 包 https://github.com/moodio/msal-flutter

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    可以使用flutter的默认方法catchError()

    mymethod() async{
      await methodWhichCanThrowException().catchError((e)=> print(e.toString());
      ...
    }
    

    【讨论】:

    • 正如我所提到的,我尝试过它,但它不起作用,而且我知道它是不可能捕捉到这种错误的。我所能做的就是分叉插件并将错误从平台传递给这样的颤动:result.error("ERROR_TYPE","Error message",exceptionFromAuthentificationCallback.localizedMessage)
    • @IlyaMaximencko 你在使用这个 msal_flutter 包时解决了这个问题吗?我在 Android 上也遇到了问题,而在 iOS 上我确实设法让它工作。
    • @Anand 检查我的 fork,希望它能解决你的问题github.com/IlyaMax/msal-flutter
    猜你喜欢
    • 2019-03-14
    • 2021-12-22
    • 2019-01-05
    • 2014-08-26
    • 2012-02-08
    • 2013-07-07
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多