2013-05-03 77 views
0

我一直在用這種方式撞擊牆壁幾天。我已經閱讀過關於該主題的每一篇文章,而且似乎沒有任何東西能夠讓我走到終點。試圖讓Google Play Services Map v2顯示時發生ClassCastException

嘗試使用Google Play Services Map v2 API構建應用程序。

我有API密鑰,沒問題。

這裏是我的位:MainActivity.java

public class MainActivity extends FragmentActivity 
{ 

    GoogleMap googleMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 
     if (status==ConnectionResult.SUCCESS) 
     { 
      SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
      googleMap = supportMapFragment.getMap(); 
     } 
     else 
     { 
      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

activity_main.xml中:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/map" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.MapFragment"/> 

相關清單:

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

<permission 
    android:name="com.mcdaniel.mmm4.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.mcdaniel.mmm4.MAPS_RECEIVE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.persmission.INTERNET" /> 
<uses-permission android:name="android.persmission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.persmission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

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

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

我得過去涉及的R NoClassDefFound錯誤$ styleable和地圖類的ClassNotFound,但我無法超越這一個。

關於這個類,我嘗試了幾個不同的實現,但沒有運氣。這一個似乎是最明確的。沒有編譯警告。

我的目標是安卓-11分鐘的android-17。我已經導入了庫(帶有複製文件選項),並且被我的項目引用,並且也導出了。

很明顯,我錯過了一些東西。請幫忙!

謝謝, 大衛

+1

你可以發佈你的日誌嗎? – HalR 2013-05-03 04:22:13

+0

你應該從那裏刪除你的密鑰 – JRowan 2013-05-03 05:33:55

+0

@JRowan不需要害怕揭露密鑰。如果你沒有他們的簽名密鑰和[b]公共價值,那麼它是不可用的,因爲APK碰到Google Play之後:沒有人能阻止你安裝應用程序,複製到計算機,解壓縮和查看(但[a]仍然有效)。 – 2013-05-03 09:51:37

回答

0

你不能投了MapFragment(從你的XML)到SupportMapFragment

正如ankitmakwana在他的回答中所暗示的,一種可能的解決方案是將XML中的MapFragment更改爲SupportMapFragment

在我看來,更好的方法是將最小支持的API設置爲API12而不是API11,並使用MapFragment而不是SupportMapFragment。那麼你不必擔心兼容性庫。

將最小支持的API設置爲API12而不是API11不應該呈現(幾乎)任何設備與您的應用程序不兼容,因爲根據由SO最大的Android專家之一發布的this answer,基本上沒有運行API11的設備。

如果你選擇走這條路,只是保持你的XML,因爲它是和改變從這個在你的代碼下面幾行:

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

這樣:

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

它將工作然後。

+0

感謝您的諮詢!終於有了很多了!我改爲min = 12,擺脫了所有對support.v4軟件包的引用,現在我沒有得到上述錯誤。但是我收到的是「無法加載地圖,無法聯繫Google服務器,請在AndroidManifest.xml中添加但它已經存在! – 2013-05-03 21:01:02

+0

我認爲應該有''而不是''。請嘗試編輯它,並讓我知道它是否工作。 – zbr 2013-05-03 21:16:08

+0

我也有這些,但錯誤特別引用了ACCESS_NETWORK_STATE,我也有。 – 2013-05-03 21:22:48

1

這或許可以幫助你在xml變化就像SupportMapFragment

<fragment 
      android:id="@+id/chk_aerrow_map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="fill_parent" 
      android:layout_margin="5dp" 
      android:layout_height="100dp" /> 

詳情請參閱Here

+1

簡單的答案。扎布里和拉古南丹可以少打「鬥毆」,並使他們的(也是最正確的)答案簡明扼要。 – 2013-05-03 09:57:49

+0

你說得對。我很快會重新格式化我的答案。謝謝。 – zbr 2013-05-03 17:59:45

+0

那麼幫助,但現在我回到NoClassDefFoundError:com.google.android.gms.R $ styleable ...太奇怪了。謝謝ankitmakwana! – 2013-05-03 20:24:26

0
  My target is android-17 with min of android-11 

你分鐘SDK是11

注:如果您希望在api 11及更低版本上運行應用程序,您還需要添加支持庫。

http://developer.android.com/tools/extras/support-library.html

使用此

android:name="com.google.android.gms.maps.SupportMapFragment" 

既然你din't添加支持庫,你有ClassCastException異常

另外,還要確保你遵循了以下鏈接

所有步驟

https://developers.google.com/maps/documentation/android/start

編輯

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapFragment

MapFragment的API 12和更高的支持片段的API 11和lowever

enter image description here

+0

API11 **是**蜂窩。不需要支持庫。 – zbr 2013-05-03 07:59:37

+0

@Zabri我剛剛在這裏回答了一個類似的問題http://stackoverflow.com/questions/16322472/google-maps-api-android-error-inflating-class-fragment/16323629#16323629。爲用戶工作。請在投票前檢查 – Raghunandan 2013-05-03 08:03:08

+0

@Zabri檢查編輯中的鏈接以獲取更多信息。檢查附帶的快照中的最後一條語句。您應該在添加評論前支持您的聲明。 – Raghunandan 2013-05-03 08:10:39

相關問題