1

私はGoogle Playにアプリケーションを持っています。より高いバージョンコードと別の名前で新しいバージョンを作成しました。自分の Android デバイス (v2.3.3) とエミュレーター (v4.0.3) でテストしました。これまでのところエラーはありませんので、アップデートを市場に出しました。

最初のエラー レポートが表示されます!!!!! (以下参照) 意味がわかりません。

新しい更新では、権限が少し変更され、2 つのライブラリ (admob メディエーション用の jumptap SDK と jumptap アダプター) が削除されました。削除された権限は次のとおりです。

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

admob 広告用に次の 2 つを残します。

<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();」があります。ここで見つけることができます 広告ブロッカーがアプリの広告をブロックしないようにする方法; 123行目もこのコード内にあります。

53 行目で、開始音とともにメディアプレーヤーが開始されます (mp.start();)。

正確には何が問題なのですか?デバイスでエラーが発生しないのはなぜですか? これは Google Play からの最初のエラー レポートです。1 つのエラーに問題がありますか?それとも、エラーが発生し、常にそれらを気にしない開発者が他にいますか?

完全な Mainjava.java は、 http://homepage.tudelft.nl/78u5u/main.zipからダウンロードできます。

編集: R.raw.start は mp3 ファイルです。

4

2 に答える 2

2

明らかに、MediaPlayer mpインスタンスは null です。MediaPlayer.createメソッドが null を返したことを意味します。

createメソッドのAndroidドキュメントで述べたように:

Returns
  a MediaPlayer object, or null if creation failed

必要なコーデックがないなどの理由で、AndroidはMediaPlayerを作成できないと思います。R.raw.startあなたのファイルのフォーマットは何ですか?フォーマットで遊んでみることができます。とにかく、この例外を適切に処理する必要があります。

また、先ほども言いましたが、ACRA を使用することをお勧めします。問題を迅速に解決するのに役立ちます。私が失効する頃には、Android ユーザーはエラー レポートを送信することを好みません。Google Play に報告されるエラーは 10% 未満です。

更新: ACRA は十分に優れていますが、ブロッキングが原因で完全ではありません。これは、アプリがクラッシュしたばかりで、ユーザーのインターネット接続が遅い場合、ANRメッセージを受け取ることができることを意味します。想像してみてください: ユーザーは、アプリがハングアップしただけだと考え、アプリの応答を待つことにした後、「申し訳ありませんが、アプリがクラッシュしました」というメッセージを受け取ります。ACRA を使用する前に、バックグラウンド サービスなどを介してレポートを送信する方法を見つける必要があります。

また、エラーを送信するためのデフォルトのバックエンドである Google Docs はひどいものです。別のバックエンドを使用することを強くお勧めします。アプリが十分に小さく、1 か月に受け取るエラー レポートが 500 件未満だと思われる場合は、専用のBugSenseを試すことができます。これは ACRAをサポートしています。

于 2012-08-02T14:45:30.703 に答える
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();
    }
}

はい、これは、サウンド ファイルを変更しない限り、おそらく新しいバグではないことを意味します。

于 2012-08-02T14:02:53.137 に答える