gpt4 book ai didi

android - 即使处理了异常,Xamarin 应用程序也会崩溃

转载 作者:行者123 更新时间:2023-11-29 01:27:38 26 4
gpt4 key购买 nike

我正在使用以下代码调用 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);
}
}

以上调用者:

public async Task GetData()
{
data= await webCaller.GetDataAsync();
}

此代码处理所有错误并显示正确的弹出窗口,应用程序继续运行,但仅在出现此特定错误时应用程序才会崩溃

System.Net.WebException: Error: ConnectFailure (Network is unreachable) ---> System.Net.Sockets.SocketException: Network is unreachable

我通过调用 API 并关闭连接来重现此错误,因此显然无法访问网络。

在我的 Activity 中,我在这里处理异常

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 调用都返回一个非空值,所以我所做的是将 API 调用放在一个 while 循环中并检查我是否得到一个空值。

这是我的代码示例:

Message[] allMessages;

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

关于android - 即使处理了异常,Xamarin 应用程序也会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com