2013-05-14 62 views
1

我下面的教程使用谷歌地圖api v2。我面臨錯誤 錯誤日誌是

05-15 00:08:18.415: E/AndroidRuntime(4547): FATAL EXCEPTION: main 
05-15 00:08:18.415: E/AndroidRuntime(4547): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.rtesh.onemore/org.rtesh.onemore.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.os.Looper.loop(Looper.java:150) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread.main(ActivityThread.java:4277) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at dalvik.system.NativeStart.main(Native Method) 
05-15 00:08:18.415: E/AndroidRuntime(4547): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:250) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.Activity.setContentView(Activity.java:1712) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at org.rtesh.onemore.MainActivity.onCreate(MainActivity.java:27) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  ... 11 more 
05-15 00:08:18.415: E/AndroidRuntime(4547): 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 00:08:18.415: E/AndroidRuntime(4547):  at android.support.v4.app.Fragment.instantiate(Fragment.java:395) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.support.v4.app.Fragment.instantiate(Fragment.java:363) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:264) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  ... 20 more 
05-15 00:08:18.415: E/AndroidRuntime(4547): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment in loader dalvik.system.PathClassLoader[/data/app/org.rtesh.onemore-1.apk] 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  at android.support.v4.app.Fragment.instantiate(Fragment.java:385) 
05-15 00:08:18.415: E/AndroidRuntime(4547):  ... 23 more 

我的MainActivity類別是

@SuppressLint("NewApi") 
public class MainActivity extends FragmentActivity { 
    static final LatLng HAMBURG = new LatLng(53.558, 9.927); 
    static final LatLng KIEL = new LatLng(53.551, 9.993); 
    private GoogleMap map; 

@SuppressLint("NewApi") 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
     .getMap(); 

    if (map!=null){ 
     Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG) 
      .title("Hamburg")); 
     Marker kiel = map.addMarker(new MarkerOptions() 
      .position(KIEL) 
      .title("Kiel") 
      .snippet("Kiel is cool") 
      .icon(BitmapDescriptorFactory 
       .fromResource(R.drawable.ic_launcher))); 
    } 

    } 

}

和activity_main.xml中是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 

</RelativeLayout> 

我給適當的權限在maifest類

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.rtesh.onemore" 
    android:versionCode="1" 
    android:versionName="1.0" > 
<permission 
     android:name="org.rtesh.android.locationapi.maps.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 
    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 
<uses-permission android:name="com.org.rtesh.android.locationapi.maps.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" /> 


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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="org.rtesh.onemore.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

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

    </application> 

</manifest> 

我提到的谷歌玩,爲什麼我面對這個錯誤??請一些一個扶 服務庫,請點主要差異之間的谷歌地圖VERSION1和2!

回答

2

剛剛嘗試,以取代您的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

您需要使用SupportMapFragment的API下11!

在您的MainActivity中(或者在您想放置v2映射的每個活動中),您必須擴展FragmentActivity或Activity,以便使用SupportMapFragment或MapFragment。只有在您定位API 12及更高版本時才使用MapFragment類。否則,請使用SupportMapFragment。這是一個微妙的差異,但它會導致錯誤。

編輯:

請改變你的代碼FragmentActivity:

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

理解這個概念。由於您針對的是Android版本較低的版本不支持片段,因此您需要使用支持庫來處理您的片段。所以無論你在哪裏使用片段,都要確保你從support庫中導入了一個片段。

+0

使用SupportMapFragment運算將需要添加支持庫以及 – Raghunandan

+0

是üR右,但他已經在使用它。見問題的標題...... – Shrikant

+0

他需要增加支持庫Android的支持,v4.jar.i不是說使用它 – Raghunandan

0

你分鐘SDK是8.您將需要添加支持庫的API版本低於12

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

所以您需要添加支持庫

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

既然你din't落後compatibality添加支持庫你有classcastexception

要添加支持庫檢查下面的鏈接

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

用於下載支持片段

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

欲瞭解更多信息,請檢查線路

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

檢查線路正上方的標題開發者指南。

有關地圖API第2版的詳細信息查看文檔

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

1

首先,像其他響應者這篇文章你應該改變最小的Android SDK水平至少11

android:minSdkVersion="11" 

這裏是我昨天做的工作示例。

activity_main.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" > 

<fragment 
android:name="com.google.android.gms.maps.SupportMapFragment" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
map:cameraTargetLat="33.41662287712097" 
map:cameraTargetLng="35.21843892856462" 
map:cameraZoom="4"/> 

</LinearLayout>In MainActivity.java onCreate() 

在MainActivity.java的onCreate()

public class MainActivity extends FragmentActivity { 

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

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

mMap.addMarker(new MarkerOptions() 
.position(new LatLng(35.21843892856462, 33.41662287712097)) 
.title("My Office")); 

} 

要看到我的代碼的結果的截圖中看到在這個職位我的回答。 gl hf! Google Map V2 not working for me . Any sample?

+0

你能解釋一下,爲什麼我們需要將minSdkVersion設置爲11? – Shrikant

+0

看看這個答案http:// stackoverflow。com/questions/16195631/google-maps-v2-on-android-devices-with-minsdk-below-11 – FireStorm

+0

是的,但根據馬克的評論我瞭解abd事實是,android支持庫是專門設計用於支持功能不適用於較舊的Android版本。 – Shrikant

1

公共類SearchOffer擴展FragmentActivity {

GoogleMap gmpSearchOfferMap; 
Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    try { 
     setContentView(R.layout.search_offers); 

     if (gmpSearchOfferMap == null) { 
      gmpSearchOfferMap = ((SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.gmpOfferMap)).getMap(); 
     } 

     if (gmpSearchOfferMap != null) { 
      gmpSearchOfferMap.setMyLocationEnabled(true); 
      gmpSearchOfferMap.getUiSettings().setMyLocationButtonEnabled(
        true); 
      gmpSearchOfferMap.getUiSettings().setZoomControlsEnabled(true); 
      gmpSearchOfferMap.getUiSettings().setZoomGesturesEnabled(true); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

}

相關問題