Android Xamarin应用程序即使在处理异常时也会崩溃

Android Xamarin应用程序即使在处理异常时也会崩溃,android,exception,error-handling,xamarin,Android,Exception,Error Handling,Xamarin,我正在使用下面的代码调用API public async Task<Dictionary<string, string>> GetDataAsync() { try { var url = "https://address.com/myapi"; var request = new RestRequest(url, Method.GET) { Timeout = 5000 };

我正在使用下面的代码调用API

public async Task<Dictionary<string, string>> GetDataAsync()
    {
      try
        {
            var url = "https://address.com/myapi";
            var request = new RestRequest(url, Method.GET) { Timeout = 5000 };
            request.AddAuthenticationHeaders();
            var response = await _client.ExecuteTaskAsync(request);
            return ProcessResponse(response);
        }
        catch (Exception e)
        {
            throw new MyApplicationException(e.Message, e.InnerException, AlertCode.UnknownError);
        }
    }
此代码处理所有错误并显示正确的弹出窗口,应用程序将继续,但只有在出现此特定错误时,应用程序才会崩溃

System.Net.WebException: Error: ConnectFailure (Network is unreachable) ---> System.Net.Sockets.SocketException: Network is unreachable
我通过调用API并关闭连接来重现此错误,因此显然无法访问网络

在我的活动中,我在这里处理异常

protected virtual void OnException_Occured(object sender, RaiseThrowableEventArgs e)
    {
        RunOnUiThread(
                () =>
                {
                    ExceptionPopup.Popup = new CommonPopup(this, ExceptionHelper.GetUserFriendlyMessage(e.Exception));
                    ExceptionPopup.Popup.Show();
                });
        }

        ReportError(e.Exception);

        e.Handled = true;
    }
简历:

protected override void OnResume()
    {
        base.OnResume();
        AndroidEnvironment.UnhandledExceptionRaiser += OnException_Occured;
    }
暂停:

protected override void OnPause()
    {
        base.OnPause();
        AndroidEnvironment.UnhandledExceptionRaiser -= OnException_Occured;
    }

它是在每次调用
GetData()
时崩溃,还是随机崩溃

我今天遇到了一个类似的问题,我的异步API调用使iOS应用程序随机崩溃。我不确定我的问题是否与你的有关,但我会解释我做了什么,以防对你有所帮助

在我的案例中,问题与连接无关。由于某些原因,API调用并不总是成功的,当它失败时,它会将null返回给我的变量,这会导致以后出现“对象未设置为对象的实例”错误。因为我不能保证每次API调用都返回非null值,所以我所做的就是将API调用放入while循环中,并检查是否得到null值

下面是我的代码示例:

Message[] allMessages;

while(allMessages==null)
{
allMessages = await Message.GetAsync();
}

当应用程序崩溃时,日志是什么样子的?@Wosi在这里看一看,我遇到了完全相同的问题。你找到解决方案了吗?@coalmee不是一个确切的解决方案,而是我开始使用CurrentDomain_UnhandledException的一种变通方法。它可以处理一些异常,但仍然会有一些碰撞。在按下拨打电话的按钮的同时,我正在关闭wifi以重现此错误,我收到了错误,但没有处理
Message[] allMessages;

while(allMessages==null)
{
allMessages = await Message.GetAsync();
}