在软件开发中,错误报告是提高应用稳定性和用户体验的重要环节。当应用程序发生异常时,如何有效地收集错误信息并提供给开发者,是一个值得关注的问题。本文将介绍一种用户友好的错误报告机制,它允许用户在遇到错误时选择是否发送错误报告给开发者。
在之前的文章中,收到了许多关于应用程序错误处理的评论和电子邮件。有人询问,如果用户知道应用程序正在将错误信息发送回支持地址,他们会感到满意吗?认为,与其直接告诉用户发生了错误,不如告诉他们“出了点问题”,然后询问他们是否愿意将错误报告发送给应用开发者。
不久前,查看了Coding4Fun Windows Phone Toolkit,他们有一个提示(或者说更具体地,一个弹出窗口)的概念。以下是实现的弹出窗口:
public class ExceptionPrompt : PopUp<Exception, PopUpResult>
{
private Button okButton;
private CheckBox submitCheckBox;
private Exception exception;
public ExceptionPrompt()
{
DefaultStyleKey = typeof(ExceptionPrompt);
DataContext = this;
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (okButton != null)
okButton.Click -= okButton_Click;
okButton = GetTemplateChild("okButton") as Button;
submitCheckBox = GetTemplateChild("canSubmitCheckBox") as CheckBox;
if (okButton != null)
okButton.Click += okButton_Click;
}
public string To { get; set; }
void okButton_Click(object sender, RoutedEventArgs e)
{
var message = new StringBuilder();
message.Append("Exception type: ");
message.Append(exception.GetType());
message.Append(Environment.NewLine);
message.Append("Message: ");
message.Append(exception.Message);
message.Append(Environment.NewLine);
message.Append("Stack trace: ");
message.Append(exception.StackTrace);
var task = new Microsoft.Phone.Tasks.EmailComposeTask
{
Body = message.ToString(),
Subject = "Error Report",
To = To
};
if (submitCheckBox.IsChecked == true)
{
task.Show();
}
OnCompleted(new PopUpEventArgs<Exception, PopUpResult>
{
PopUpResult = PopUpResult.OK
});
}
public void Show(Exception exception)
{
this.exception = exception;
base.Show();
}
}
一旦发生异常,只需要调用以下代码:
var exception = new ExceptionPrompt();
exception.Show(new SecurityException("Ooops, something is seriously wrong!!!"));
这样,用户就可以选择是否将异常发送给应用开发者。这种方法不仅提高了用户体验,还有助于开发者收集错误信息,以便更快地解决问题。