2013-06-26 12 views
2

的Android 2.3.3錯誤而執行谷歌地圖API的Android V2 - SupportMapFragment解決不了

我已經閱讀了很多關於同一問題的問題,但我越讀越我感到困惑。所以,我把我的問題放在這裏,如果它有重複,請承擔責任,但我真的無法弄清楚。

I have minSdkVersion=8 and targetSdkVersion=17 and 
I am targeting devices from Android version 2.2 and above 

這是我做的事情的清單:

  1. 註冊以谷歌API控制檯 - 得到API密鑰 - 原來在谷歌地圖API的Android V2。
  2. 將google-play-services_lib導入到項目中,並將其添加爲庫。
  3. 因爲我的目標版本低於3.0,所以我已經閱讀了一些我應該使用ActionbarSherlock的地方,所以我導入了它,並將其添加爲庫。

請看下面的截圖和代碼,讓我知道,我哪裏出錯了。 我讀過,我需要在XML中使用「SupportMapFragment」,並在類文件中「擴展FragmentActivity」,但我沒有得到它的正常工作。

enter image description here

enter image description here

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.xx.xxx" 
     android:versionCode="1" 
     android:versionName="1.0" > 

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

     <permission 
      android:name="com.xx.xxx.permission.MAPS_RECEIVE" 
      android:protectionLevel="signature" /> 

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

     <uses-permission android:name="com.xx.xxx.permission.MAPS_RECEIVE" /> 
     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
     <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 


     <application 
      android:name=".xxxApp" 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/appName" > 
      <uses-library android:name="com.google.android.maps" /> 

      <activity 
       android:name=".SplashActivity" 
       android:screenOrientation="portrait" 
       android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" > 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 

//All Activities are declared here, including the MapsActivity 

      <!-- Google Maps APIV2 Key --> 
      <meta-data 
       android:name="com.google.android.maps.v2.API_KEY" 
       android:value="My_API_KEY(Removed)" /> 

     </application> 

    </manifest> 

maps.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:contentDescription="@string/imageDescription" 
       android:scaleType="fitXY" 
       android:src="@drawable/nav_bar_background" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:text="@string/map" 
       android:textColor="#FFFFFF" 
       android:textSize="20sp" 
       android:textStyle="bold" /> 
     </RelativeLayout> 

     <fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
//changed this to support versions < 3.0 
      class="com.google.android.gms.maps.SupportMapFragment" /> 

    </LinearLayout> 

MapsActivity.xml

public class MapsActivity extends FragmentActivity { 
     private MapView mapView; 
     private GoogleAnalyticsTracker tracker; 
     private GeoPoint point; 
     private OverlayItem overlayitem; 

     static final LatLng hacc_position = new LatLng(25.981343, -80.161756); 
     //static final LatLng KIEL = new LatLng(53.551, 9.993); 
     private GoogleMap map; 

     @Override 
     protected void onCreate(Bundle bundle) { 
      super.onCreate(bundle); 
      setContentView(R.layout.maps); 

    **//Error at below line : SupportMapFragment cannot be resolved** 

      map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 

      Marker hacc = map.addMarker(new MarkerOptions().position(hacc_position) 
        .title("XYZ")); 

      // Move the camera instantly to hacc with a zoom of 15. 
      map.moveCamera(CameraUpdateFactory.newLatLngZoom(hacc_position, 15)); 

      // Zoom in, animating the camera. 
      map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 
      } 

我不確定如何解決此問題。我必須支持2.2及更高版本的設備,這是強制性的。

有人可以請幫忙。

我不能,因爲我有錯誤的

map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
         .getMap(); 

讓我知道要執行的項目,如果你需要的任何信息。

問題截圖:

enter image description here

感謝您的幫助!

根據CommonsWare的建議,我導入了軟件包,錯誤消失了。當我運行應用程序時,我得到一個ClassNotFoundException。請看看logcat跟蹤。

06-26 17:27:15.759: E/Crittercism(19853): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xx.xxx/com.xx.xxx.MapsActivity}: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
06-26 17:27:15.759: E/Crittercism(19853): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-26 17:27:15.759: E/Crittercism(19853): at android.os.Looper.loop(Looper.java:130) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread.main(ActivityThread.java:3687) 
06-26 17:27:15.759: E/Crittercism(19853): at java.lang.reflect.Method.invokeNative(Native Method) 
06-26 17:27:15.759: E/Crittercism(19853): at java.lang.reflect.Method.invoke(Method.java:507) 
06-26 17:27:15.759: E/Crittercism(19853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
06-26 17:27:15.759: E/Crittercism(19853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
06-26 17:27:15.759: E/Crittercism(19853): at dalvik.system.NativeStart.main(Native Method) 
06-26 17:27:15.759: E/Crittercism(19853): Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
06-26 17:27:15.759: E/Crittercism(19853): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.Activity.setContentView(Activity.java:1657) 
06-26 17:27:15.759: E/Crittercism(19853): at com.waspmobile.haccoclc.MapsActivity.onCreate(MapsActivity.java:54) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-26 17:27:15.759: E/Crittercism(19853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
06-26 17:27:15.759: E/Crittercism(19853): ... 11 more 
06-26 17:27:15.759: E/Crittercism(19853): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.xx.xxx-1.apk] 
06-26 17:27:15.759: E/Crittercism(19853): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
06-26 17:27:15.759: E/Crittercism(19853): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
06-26 17:27:15.759: E/Crittercism(19853): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.createView(LayoutInflater.java:471) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549) 
06-26 17:27:15.759: E/Crittercism(19853): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
06-26 17:27:15.759: E/Crittercism(19853): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
06-26 17:27:15.759: E/Crittercism(19853): ... 20 more 
06-26 17:27:15.959: E/AndroidRuntime(19853): FATAL EXCEPTION: main 
06-26 17:27:15.959: E/AndroidRuntime(19853): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xx.xxx/com.xx.xxx.MapsActivity}: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.os.Looper.loop(Looper.java:130) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread.main(ActivityThread.java:3687) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at java.lang.reflect.Method.invokeNative(Native Method) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at java.lang.reflect.Method.invoke(Method.java:507) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at dalvik.system.NativeStart.main(Native Method) 
06-26 17:27:15.959: E/AndroidRuntime(19853): Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.Activity.setContentView(Activity.java:1657) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at com.xx.xxx.MapsActivity.onCreate(MapsActivity.java:54) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
06-26 17:27:15.959: E/AndroidRuntime(19853): ... 11 more 
06-26 17:27:15.959: E/AndroidRuntime(19853): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.xx.xxx-1.apk] 
06-26 17:27:15.959: E/AndroidRuntime(19853): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.createView(LayoutInflater.java:471) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
06-26 17:27:15.959: E/AndroidRuntime(19853): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
06-26 17:27:15.959: E/AndroidRuntime(19853): ... 20 more 

訂單和出口標籤

enter image description here

+0

請粘貼堆棧跟蹤。 – CommonsWare

+0

@CommonsWare,我無法運行應用程序,因爲我在上面提到的行有錯誤。請看看它。 –

+0

對不起,標題,我已經改變了代碼,我現在將編輯標題。 –

回答

9

也許你缺少import語句com.google.android.gms.maps.SupportMapFragment

你也不妨確認一下,如果你是在R22工具上,那your "Order & Export" portion of the Eclipse build path dialog is properly configured

+0

你是對的。我錯過了導入。我添加了導入並運行了應用程序。但是,我得到了一些例外(我想是ClassNotFoundException)。我用我的logcat trace更新了這個問題。請看看它。 –

+0

在使用Android支持包的片段回送時,您的異常通常與嘗試從除FragmentActivity之外的內容加載包含''的佈局相關聯。 – CommonsWare

-1

我不這麼認爲下面的代碼將工作

map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 

您應該使用getChildFragmentManager();檢索片段。

map = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 
-1

@Vamsi Challa 我解決你的問題,我的Eclipse IDE中通過impoting進口com.google.android.gms.maps.MapFragment;然後改變

map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

然後它解決了這個問題對我來說。 PS - > MANIFEST is USING: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />