0

そのため、ユーザーが地理的な場所から特定の距離内に入ったときに作成するディレクトリにファイルを保存するアプリケーションがあります。通常SDカードを使用する特定のデバイスでSDカードが取り外され、ユーザーがログインするとアプリがクラッシュする場合を除いて、すべて正常に動作します.droid xを試してみたところ、クラッシュを再現できました. SDカードが入っていると正常に動作しますが、SDカードが取り外されるとnullpointer例外が発生し、強制終了します。

市場からのログ ダンプを次に示します。

java.lang.RuntimeException: Unable to resume activity       {graffit.cores/graffit.cores.GraffView}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2208)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2228)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1721)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at graffit.cores.GraffView.onResume(GraffView.java:1201)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
at android.app.Activity.performResume(Activity.java:3882)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2191)
... 12 more
java.lang.NullPointerException
at graffit.cores.GraffView.onResume(GraffView.java:1201)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
at android.app.Activity.performResume(Activity.java:3882)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2191)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2228)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1721)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

logdump はインストルメンテーションの失敗について何かを言っているので、それをキャッチするか、sd カードが利用可能かどうかを探す必要があると推測しています。

SDカードを探す方法を見つけることができると確信していますが、このクラッシュをキャッチして、欠落しているSDカードの代わりに内部ストレージを使用するにはどうすればよいですか.

どんな助けでも大歓迎です。

4

1 に答える 1

1

外部ストレージを操作する前に、必ず getExternalStorageState() を呼び出して、メディアが利用可能かどうかを確認する必要があります。あなたの場合のように、メディアが常に利用できるとは限りません。Android ドキュメントには、これに対処する方法の例が示されています: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

おそらく最善の方法は、外部ストレージにアクセスできるかどうかについてブール値を返す関数でこのチェックを行い、カードからデータを取得する必要があるたびにそれをチェックすることです.

if (sdCardAvalableForRead())
{
   // get file.
}
else
{
   // show warning or message to user.
}
于 2012-04-05T23:55:21.720 に答える