2013-05-15 18 views
14

Ich verwende Google Map V2 API für die Karte. Ich habe die google-play-services.jar im libs-Ordner kopiert und im Build-Pfad von eclipse festgelegt.Fehler java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment in Google Map V2

Ich bekomme eine Ausnahme, als ich logcat hinzugefügt.

Bitte helfen Sie dieses Problem zu lösen.

home_map_view.xml

<fragment 
     android:id="@+id/map" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_marginBottom="60dp"/> 

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> 

    <permission 
     android:name="com.example.app.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature"/> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    <uses-permission android:name="com.example.app.permission.MAPS_RECEIVE"/> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true"/> 

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="KEY"/> 

     <activity android:name=".MainActivity" android:label="@string/app_name" android:clearTaskOnLaunch="true" 
      android:configChanges="orientation" android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity android:name=".HomeMapView" android:label="@string/title_home" android:configChanges="orientation" android:launchMode="singleTop" /> 
    </application> 
</manifest> 

HomeMapView.java

public class HomeMapView extends FragmentActivity implements OnTabChangeListener { 

    private GoogleMap mapView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home_map_view); 

     // Getting reference to SupportMapFragment of the activity_main 
     SupportMapFragment fragment = new SupportMapFragment(); 
     getSupportFragmentManager().beginTransaction() .add(R.id.map, fragment).commit(); 

     // Getting Map for the SupportMapFragment 
     mapView = fragment.getMap(); 
     mapView.setMyLocationEnabled(true); 
    } 
} 

Logcat:

05-15 23:17:52.843: E/AndroidRuntime(19782): FATAL EXCEPTION: main 
05-15 23:17:52.843: E/AndroidRuntime(19782): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.HomeMapView}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.os.Looper.loop(Looper.java:130) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread.main(ActivityThread.java:3687) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at java.lang.reflect.Method.invoke(Method.java:507) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at dalvik.system.NativeStart.main(Native Method) 
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:216) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.Activity.setContentView(Activity.java:1660) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at com.example.app.HomeMapView.onCreate(HomeMapView.java:61) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
05-15 23:17:52.843: E/AndroidRuntime(19782): ... 11 more 
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.support.v4.app.Fragment.instantiate(Fragment.java:395) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.support.v4.app.Fragment.instantiate(Fragment.java:363) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:264) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
05-15 23:17:52.843: E/AndroidRuntime(19782): ... 20 more 
05-15 23:17:52.843: E/AndroidRuntime(19782): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.example.app-2.apk] 
05-15 23:17:52.843: E/AndroidRuntime(19782): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
05-15 23:17:52.843: E/AndroidRuntime(19782): at android.support.v4.app.Fragment.instantiate(Fragment.java:385) 
05-15 23:17:52.843: E/AndroidRuntime(19782): ... 23 more 

Antwort

23

Sie Problem ist die Art und Weise Sie google-play-services zu Ihrem Projekt hinzugefügt:

I have copied the google-play-services.jar in libs folder and set in the build path of eclipse.

Das ist falsch! Lesen Sie die ersten 3 Schritte dieser Blog-Post schrieb ich eine Vorstellung davon zu bekommen, wie es richtig zu tun:

Google Maps API V2

Kurz gesagt, Sie google-play-services als Projekt in Ihrem Arbeitsbereich importieren sollen. und dann referenzieren Sie es von Ihrem Projekt.

dies sollte das Ergebnis sein:

enter image description here

+0

@Emil Adz Ich bekomme diese Ausnahme java.lang.NoClassDefFoundError: com.google.android.gms.R $ styleable. –

+0

Haben Sie alle im Handbuch beschriebenen Schritte ausgeführt? –

+1

@ user1996510 Ich denke, Sie haben noch nicht richtig auf Google Play Services Bibliothek verwiesen. – Raghunandan

11

Verwenden Sie das Support-Map-Fragment anstelle des Map-Fragments. Stellen Sie sicher, dass Sie die Unterstützung libray

<fragment 
    android:id="@+id/map" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:name="com.google.android.gms.maps.SupportMapFragment " 
    android:layout_marginBottom="60dp"/> 

Zweite hinzugefügt haben Sie die JAR-Datei auf Ihren Build-Pfad kopieren sollte.

Sie sollten das Google Play Services-Bibliotheksprojekt in Ihrem Kartenprojekt referenzieren.

Importieren Sie Ihr Bibliotheksprojekt in Ihre Arbeitsumgebung. Importieren Sie das gleiche in Eclipse.

Klicken Sie mit der rechten Maustaste auf Ihr Projekt. Gehe zu Eigenschaften. Wähle Android. Klicken Sie auf Android. Durchsuchen Sie das Bibliotheksprojekt und fügen Sie es hinzu.

enter image description here

+0

@EmilAdz Ich sehe Ihren Beitrag nicht und bearbeite meine Antwort. Es tut mir leid, wenn Sie sich so fühlen. Ich habe bereits mit der Bearbeitung begonnen, noch bevor Sie die Antwort gepostet haben.Da du meine Bearbeitung nicht sehen konntest du anders gedacht – Raghunandan

+0

@EmilAdz ich habe die Antwort gepostet und dann angefangen zu bearbeiten. Könntest du sehen, während ich gerade geschnitten habe? In der Zwischenzeit hast du die Antwort gepostet. Zu der Zeit, als Sie mein Update sehen konnten, dachten Sie, ich hätte Ihre Antwort kopiert. Es tut mir leid, dass es nicht so ist. Wenn Sie so denken, werde ich Ihre Antwort aufwerten. Sie nehmen den Kredit – Raghunandan

+0

Ich kann nicht helfen, wenn Sie es so fühlen. Ich bearbeite meine Antwort nicht, wenn ich deinen Beitrag sehe. – Raghunandan

0

If everything is woking same as google code then please check manifest file in my case i added geo key and map key that's why exception occurs,

Hinweis - fügen Sie nicht zwei Schlüssel in Manifest-Datei entfernen Mapkey

meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="@string/google_maps_key"/> 

diesen Code hinzufügen.

<meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="@string/auto_location"/> 

<meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version"/> 
Verwandte Themen