gpt4 book ai didi

windows-phone-7 - 在 MVVMCross 应用程序中处理异常的建议方法是什么?

转载 作者:行者123 更新时间:2023-12-04 21:40:27 24 4
gpt4 key购买 nike

我们正在使用 MVVMCross 框架为 iOS、Android 和 WP7 开发一个跨平台应用程序,我在 MvxApplication 中缺少一个我可以覆盖的方法,它可以作为平台中立的未处理异常处理程序(它被调用平台特定的)。

所以问题是一般情况下以及在 MVVMCross 应用程序中的异步调用期间处理异常的建议方法是什么?

谢谢,阿提拉

最佳答案

对于真正意外的异常(崩溃!),这个问题目前没有答案:参见 crash reporting in MonoTouch and MonoDroid


但是,有关如何在异步调用期间处理异常的建议,请查看 BestSellers 示例:MvvmCross BestSellers Sample

BestSellers 使用了 2 种我发现我在 MvvmCross 应用程序中使用了很多的技术:

  • 将 BaseViewModel 类用于错误处理等共享 ViewModel 代码
  • 使用应用级“错误路由器”将错误从 ViewModel 获取到 UIAlertView、Toast 和/或 MessageBox 等 UI 通知。

在更详细的层面上,BestSellers 所做的是:

每个 ViewModel 都使用对网络服务的直接调用来获取书籍信息。例如 Category List构造为:

    public CategoryListViewModel()
{
AsyncLoad();
}

private void AsyncLoad()
{
GeneralAsyncLoad(URL_CATEGORIES, ProcessResult);
}

其中 GeneralAsyncLoad 在共享 BaseViewModel 中定义:

    protected void GeneralAsyncLoad(string url, Action<Stream> responseStreamHandler)
{
try
{
IsLoading = true;
var request = WebRequest.Create(url);
request.BeginGetResponse((result) => GeneralProcessResponse(request, result, responseStreamHandler), null);
}
catch (ThreadAbortException)
{
throw;
}
// obviously we could do better than catching all `Exception` here!
catch (Exception exception)
{
IsLoading = false;
ReportError("Sorry - problem seen " + exception.Message);
}
}

上述异常处理程序中的 ReportError 方法使用了一个注入(inject)对象 - IErrorReporter

此注入(inject)对象在 App 构造期间被初始化为单例 - 请参阅 App.cs 中的 ErrorApplicationObject

在构建和设置期间,UI 项目都订阅了来自同一个单例的事件 - 但使用的是 IErrorSource 接口(interface)或 IErrorReporter

然后这允许每个平台显示它自己的错误显示 - 例如:


显然,如果您需要错误处理和错误显示 - 例如如果您想重试异步操作,或者如果您想改为加载离线数据副本 - 那么您可以将其添加到 ViewModel 和 BaseViewModel 中的错误处理中。

关于windows-phone-7 - 在 MVVMCross 应用程序中处理异常的建议方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411352/

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