2013-01-15 33 views
1

我在我的Android应用程序中使用ACRA内。ACRA cound没有处理异常情况的应用#的onCreate()

但我发现,当异常应用#onCreate()方法中发生,它只能保存报告文件,而不是提高该对话框发送。

这有什么错我的代码?

@ReportsCrashes(formKey="") 
public class MyAndroidApplication extends Application 
{ 
     public void onCreate() 
     { 
      ACRAConfiguration config = ACRA.getConfig(); 
      config.setMailTo("[email protected]"); 
      config.setResToastText(R.string.acra_toast); 
      config.setResDialogText(R.string.acra_dlg_txt); 
      config.setResDialogCommentPrompt(R.string.acra_dlg_comment_prpmpt); 
      try 
      { 
       config.setMode(ReportingInteractionMode.DIALOG); 
      } 
      catch (ACRAConfigurationException e) 
      { 
       logger.error("fail to config ACRA", e); 
       return; 
      } 
      ACRA.setConfig(config); 
      ACRA.init(this); 
      someMethodThrowsException(); 
     } 
} 
+0

代替logger.error,尝试e.printStackTrace() – njzk2

回答

1

在创建任何Activity之前的ApplicationonCreate被调用并且不具有UI,因此ACRA无法显示的对话框。从android docsonCreate

当应用程序开始时调用,任何活动,服务,或 接收器对象(不包括内容提供者)已被创建之前。 实现应该尽可能快(例如使用状态初始化的延迟 ),因为在此函数中花费的时间直接影响启动第一个活动, 服务或进程中的接收方的性能。如果你重写这个方法,一定要调用super.onCreate(),否则为 。

所以,一定要打电话super.onCreate(),你上面的例子是缺少哪个,你不应该做一大堆那里,会导致异常。

+0

所以,如果异常发生在应用#OnCreate中,我们不应该用对话模式? – nut

+0

您仍然可以使用它,它只是不会显示对话框,因此可能不会将错误报告通过电子邮件发送给您(因为对话框会向用户确认报告)。我个人使用自动提交的“Toast”,然后在我的偏好设置中提供“自动发送崩溃报告”选项。 – iagreen

+0

看来我最好换成敬酒模式。谢谢! – nut

0

我看到你的代码有两个问题。

  1. 你不初始化ACRA
  2. 你的类应该有塔注释@Reportscrashes即使参数设置在运行时调用后super.onCreate()。否则,你会得到logcat的一个错误说称为ACRA#的init,但是,应用没有ReportsCrashes注释

此外,我不知道,如果应用程序可以显示一个对话框,因为它有与之关联的UI布局。如果您更改以上两点,敬酒报告可以正常工作。

+0

1.我检查了超类android.app.Application#onCreate(),它什么也没做。
2. – nut

+0

2.我添加了@ReportCrashes注解但仍然没有对话框。也许是因为你说的应用程序没有UI布局.. – nut

相关问题