android开发人员崩溃报告

时间:2012-08-02 13:50:29

标签: android error-handling

我在google play上有一个应用程序。 我用更高的版本代码和不同的名称制作了一个新版本。 在我自己的Android设备(v2.3.3)和模拟器(v4.0.3)上测试它。 到目前为止没有错误,所以我把更新推向市场。

现在第一个错误报告进来!!!!! (见下文) 我不知道这意味着什么。

新的更新权限稍有变化,我删除了两个库(用于admob中介的jumptap SDK和jumptap适配器)。 删除的权限是:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

将这两个留给admob广告:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

错误代码:

 java.lang.RuntimeException: Unable to start activity
 ComponentInfo{com.masked.app/com.masked.app.mainjava}:java.lang.NullPointerException
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2705)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2721)
 at android.app.ActivityThread.access$2300(ActivityThread.java:132)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:123)
 at android.app.ActivityThread.main(ActivityThread.java:4669)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:521)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
 at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
 at com.masked.app.mainjava.onCreate(mainjava.java:53)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)

在第132行,有“adblockcheck();”可以在这里找到 How to prevent ad blocker from blocking ads on an app; 第123行也在此代码中。

在第53行,启动媒体播放器(mp.start();)并发出声音。

究竟是什么问题,为什么我的设备上没有错误? 这是我通过谷歌播放的第一个错误报告,是一个错误有问题,还是有更多的开发人员遇到错误,并不总是关心他们?

可以在此处下载完整的Mainjava.java http://homepage.tudelft.nl/78u5u/main.zip

编辑: R.raw.start是一个mp3文件。

2 个答案:

答案 0 :(得分:2)

显然,您的MediaPlayer mp实例为空。这意味着MediaPlayer.create方法返回null。

如在create方法的android文档中所述:

Returns
  a MediaPlayer object, or null if creation failed

我认为,android无法为你创建MediaPlayer,因为缺少必需的编解码器等等。您的R.raw.start文件的格式是什么?您可以尝试使用格式。 无论如何,你需要优雅地处理这个例外。

另外,如前所述,我建议您使用ACRA。它可以帮助您快速解决问题。由于我的到期,Android用户不喜欢发送错误报告。不到10%的错误会报告给Google Play。

更新: ACRA很好,但不完美,因为阻塞。这意味着如果应用程序刚刚崩溃且用户连接速度较慢,则可以获得ANR消息。让我们想象:用户认为应用程序只是挂起,并决定等待应用程序响应,然后收到“抱歉,应用程序崩溃”的消息。在使用ACRA之前,您必须找到通过后台服务等方式发送报告的方法。

此外,Google文档 - 发送错误的默认后端 - 非常糟糕。强烈建议使用另一个后端。如果您的应用程序足够小,并且您认为一个月内您将收到少于500个错误报告,则可以尝试使用专有BugSense,它支持ACRA。

答案 1 :(得分:1)

如果没有在com.masked.app.mainjava中看到(至少)你的整个onCreate()方法,那么很难说出真正发生了什么。听起来你没有初始化你的媒体播放器。

如果其他人在崩溃报告方面遇到问题,这是一个令人惊讶的方式来获得更好的Android反馈是这个项目:http://code.google.com/p/acra/

编辑:

您的问题几乎肯定是由编解码器问题引起的(由于文件类型/格式,您的设备无法播放给定的资源)。它是什么类型的声音文件?

您可以通过更改此块来解决您的问题:

if (startsoundint == 1){
    MediaPlayer mp = MediaPlayer.create(Mainjava.this, R.raw.start);
    if (mp != null) // null check
    {
        mp.start();
    }
}

是的,这意味着它可能不是一个新的bug,除非您更改了声音文件。