-3

Android互換パッケージで提供されているサンプルを試してみました。FragmentTabsPager が次のエラーでクラッシュします。

11-17 19:00:27.414: E/AndroidRuntime(5401): FATAL EXCEPTION: main
11-17 19:00:27.414: E/AndroidRuntime(5401): java.lang.NoClassDefFoundError: com.example.android.supportv4.app.LoaderCustomSupport$AppListFragment
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.example.android.supportv4.app.FragmentTabsPager.onCreate(FragmentTabsPager.java:60)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.access$2300(ActivityThread.java:126)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Looper.loop(Looper.java:123)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.main(ActivityThread.java:4633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invoke(Method.java:521)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at dalvik.system.NativeStart.main(Native Method)

どうすれば修正できますか?

ありがとう。

UPD 閉鎖に賛成票を投じる理由を知りたいですか? 私はこれをグーグルで検索し、ここで未解決の問題を見つけまし た。まだ答えはありません。私の質問は合理的であり、注目に値すると思います。

4

1 に答える 1

8

ここで何が問題なのですか?
を取得しNoClassDefFoundErrorます。それはいつ起こりますか:

検索対象のクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、その定義が見つからなくなりました。

オラクルのドキュメントから

クラスまたはその一部は、コンパイル時には使用できましたが、実行時には使用できなくなりました。これは、Android プロジェクトが特定のターゲット API レベルに設定されていて、その利用可能なクラスとメソッドを使用している場合に発生します。次に、Android のバージョンが低いデバイスでそのプロジェクトを実行します (AndroidManifest でこれを許可するように設定されていると仮定します。minSdkサンプル プロジェクトではデフォルトで 4 です)。突然、これらのコンポーネントの一部が利用できなくなる可能性があります¹。このエラーが発生します。

修正方法は?
プロジェクトのターゲット SDK を、サポートするバージョンに変更します。これを行うと、選択したツール (Eclipse など) でエラー マーカーが表示され、問題がコンパイルされるはずです。2.2に設定した場合。OnQueryTextListenerたとえば、このクラスが,SearchViewおよび(すべて API 11 で導入された) を使用していることがわかります。これらは、API レベル 10 以下のデバイスでは使用できません。この機能の回避策を構築すると、問題が解決するはずです。とにかく、これはサンプル コードであることを考えると、これらのメソッドは使用できないことに注意してください。ArrayAdapter.addAll()

TL;DR:
サンプル プロジェクトは、互換性パッケージに含まれていないレベル 11 の API 機能を使用しています。11 より前のバージョンを実行しているデバイスで実行すると、このエラーがスローされます。

¹この場合、インターフェース、OnQueryTextListener

于 2011-11-20T01:53:10.980 に答える