我在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文件。
答案 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,除非您更改了声音文件。