8

編集:詳細なハウツーについては、私の答えをチェックしてください。

私は今2日間苦労しています。誰かが助けてくれることを願っています。

MapView で最新の ActionBarSherlock (4.0) を使用しようとしています。フラグメントに問題があることはわかっていましたが、このアクティビティではフラグメントは必要ありません。しかし、ローダーが必要であり、ローダーを使用するには FragmentActivity も拡張する必要があるようです。問題ありません。Pete Doyle のandroid-support-v4-googlemapsがあると思いました。多くの SO スレッドと Google グループで提案されているように、android-support-v4.jar の代わりに android-support-v4-googlemaps JAR (実際には android-support-v13-r7-googlemaps.jar) を使用して ABS を構築します。その後、プロジェクトのライブラリとして使用しました。

今、私は自分の活動をこのようにしたいと思います:

public class BananoutMapActivity extends SherlockFragmentActivity implements LoaderCallbacks<ArrayList<EventItem>>{

問題:

コンパイルされますが、実行時エラーがスローされます。E/AndroidRuntime(29159): java.lang.NoClassDefFoundError: ndl.klimczak.bananout.BananoutMapActivity

私がトリプルチェックしたこと:

  • ActionBarSherlock ライブラリ プロジェクトと私のプロジェクトの両方が Google API 4.0.3 を対象としています
  • 私は<uses-library android:name="com.google.android.maps" />それをアプリケーションタグに持っています。
  • プロジェクトのビルドパスにも同じ android-support-v13-r7-googlemaps.jar があります
  • マニフェストで.BananoutMapActivity宣言しました

興味深い点:

  • ICS エミュレーターで実行すると動作します (2.* エミュレーターと 2.3.7 デバイスでエラーが表示されます)。

  • パーツを削除してimplements LoaderCallbacks<ArrayList<EventItem>>も機能しますが、この方法では LoaderManager を使用できません

いったいなぜ NoClassDefFoundError エラーが発生し、ローダーを MapCapableSherlockEnabledFragmentActivity で動作させるにはどうすればよいでしょうか?

4

2 に答える 2

19

非推奨: 問題はGoogle Maps Android API v2で解消されると思います。非推奨の v1 を使用することにした場合の解決策は次のとおりです。


ジェイクは正確な問題に答えましたが、多かれ少なかれ詳細なハウツーを誰かが持っていると役立つと思いました. では、ActionBarSherlock をマップで動作させるにはどうすればよいでしょうか?

ActionBarSherlock がセットアップされ、ライブラリ プロジェクトとして動作していると仮定すると、その方法に関するチュートリアルがたくさん見つかります。

ActionBarSherlock で MapActivity を使用するだけの場合は、簡単です。

  1. Jake の MapsPlugin をダウンロードhttps://github.com/JakeWharton/ActionBarSherlock-Plugin-Maps
  2. これをアプリの libs フォルダーに置き、ビルド パスに含めます。

フラグメントやローダーなどのハニカム機能で MapView を使用する場合:

  1. Google マップで Pete Doyle の Android サポート パッケージをダウンロードします: https://github.com/petedoyle/android-support-v4-googlemaps
  2. jar を作成します (事前にコンパイルされた jar をダウンロードする場合は、zip の名前を jar に変更するだけです)。v13 バージョンを入手できます。これには v4 が含まれています。
  3. ワークスペースに ActionBarSherlock ライブラリのコピーを作成します (ActionBarSherlockMaps などの名前を付けます)。元のものを台無しにしないように、後で使用する必要がある場合があります。
  4. ActionBarSherlockMaps とプロジェクトの両方を最新の Google API に対してビルドすることを忘れないでください。Google API なしで通常の Android 4.0.3 を使用している場合、動作しません
  5. jar (例: android-support-v13-r7-googlemaps.jar) を新しい ActionBarSherlockMaps の libs フォルダーに置き、ビルド パスから android-support-v4.jar を除外し、android-support-v13-r7-googlemaps を含めます。 .jar
  6. リビジョン 7 では、SherlockFragmentActivity のこのステップでコンパイル エラーが発生します。可視性を見つけprotected void supportInvalidateOptionsMenu()て変更しますpublic(この手順は新しいバージョンの ABS では必要ありません)。
  7. プロジェクトの libs フォルダーに同じ jar を配置し、ビルド パスから android-support-v4.jar を除外し、android-support-v13-r7-googlemaps.jar を含めます。
  8. <uses-library android:name="com.google.android.maps" />マニフェストファイルのアプリケーションタグを必ず入れてください
  9. フラグメント、ローダーなどに適切なインポートを使用していることを確認してください! たとえばimport android.support.v4.app.LoaderManager;insted ofを使用する必要がありますimport android.app.LoaderManager;
  10. ActionBarSherlock + Google Maps + Fragments + Loaders をお楽しみください

Google が地図を互換性ライブラリに追加するまでは、これが最善の回避策です。4.* デバイスが 2.* を上回る前に、彼らがそれを行うことを願っています...

于 2012-04-06T08:56:26.630 に答える
6

プラットフォームのローダーではなく、サポート ライブラリのローダーを使用する必要があります。これらは Android 3.0+ でのみ利用可能であり、それらをクラス定義に含めたという事実により、3.0 より前のクラスローダーはクラスを完全に拒否します。そのために必要なのは、インポートをサポート ライブラリ バリアントに切り替えることだけです。

Logcat で例外の上を見ると、1 つ以上の VerifyErrors が表示されます。これは、問題が発生した原因を具体的に示しています。

android-support-v13また、このライブラリは Android 3.2 以降でのみ使用できます(そのため、v13名前に が含まれています)。

于 2012-04-05T23:10:15.747 に答える