我们正在使用MVVMCross框架为iOS,Android和WP7开发一个跨平台的应用程序,并且我错过了MvxApplication中的一个方法,我可以重写这个方法,它可以作为平台中立的未处理异常处理程序(由平台调用具体的)。在MVVMCross应用程序中处理异常的建议方式是什么?
所以问题是什么建议的方式来处理异常一般和MVVMCross应用程序中的异步调用? (!崩溃)
感谢, 阿提拉
我们正在使用MVVMCross框架为iOS,Android和WP7开发一个跨平台的应用程序,并且我错过了MvxApplication中的一个方法,我可以重写这个方法,它可以作为平台中立的未处理异常处理程序(由平台调用具体的)。在MVVMCross应用程序中处理异常的建议方式是什么?
所以问题是什么建议的方式来处理异常一般和MVVMCross应用程序中的异步调用? (!崩溃)
感谢, 阿提拉
对于真正意外的异常那么这个问题是目前没有答案:看crash reporting in MonoTouch and MonoDroid
然而,建议你将如何异步期间处理异常打电话,然后看看BestSellers示例:MvvmCross BestSellers Sample
BestSellers使用2种技术,我发现我在MvvmCross应用程序中使用了很多:
在更详细的级别,什么畅销书的作用是:
每个视图模型采用直接调用的图书信息web服务。例如,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方法使用注入对象 - 一个IErrorReporter
。
该注射对象初始化为应用建设过程中一个单 - 见ErrorApplicationObject
在App.cs
在他们的建筑和设置,用户界面项目的所有订阅来自同一个单身活动 - 但使用IErrorSource
接口代替或IErrorReporter
。
然后这允许每个平台显示它自己的错误显示 - 例如,:
一个MessageBox显然,如果你需要的错误处理以及错误显示 - 例如如果您想重试异步操作,或者您想要加载数据的脱机副本,那么您可以将其添加到ViewModel和BaseViewModel中的错误处理中。
谢谢,这是我一直在寻找的东西! –