2014-06-21 45 views
0

我想創建使用谷歌地圖V2來顯示我的應用程序的位置。我試圖在我的華碩平板電腦上使用它,它給我在logcat上的以下錯誤:Eclipse谷歌地圖V2錯誤

06-21 12:06:10.322: E/AndroidRuntime(21020): FATAL EXCEPTION: main 
06-21 12:06:10.322: E/AndroidRuntime(21020): java.lang.RuntimeException: Unable to start activity ComponentInfo{sp.com/sp.com.RestaurantMap}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread.access$600(ActivityThread.java:156) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.os.Looper.loop(Looper.java:153) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread.main(ActivityThread.java:5299) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at java.lang.reflect.Method.invoke(Method.java:511) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at dalvik.system.NativeStart.main(Native Method) 
06-21 12:06:10.322: E/AndroidRuntime(21020): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:274) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.Activity.setContentView(Activity.java:1881) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at sp.com.RestaurantMap.onCreate(RestaurantMap.java:28) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.Activity.performCreate(Activity.java:5122) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
06-21 12:06:10.322: E/AndroidRuntime(21020): ... 11 more 
06-21 12:06:10.322: E/AndroidRuntime(21020): Caused by: java.lang.RuntimeException: API key not found. Check that <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml 
06-21 12:06:10.322: E/AndroidRuntime(21020): at mcg.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at mcg.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at mcg.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at mcg.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at mbi.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at lxn.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at lxm.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at fnb.onTransact(SourceFile:107) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.os.Binder.transact(Binder.java:310) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.maps.MapFragment$b.onCreateView(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.internal.d$4.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.internal.d.a(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.internal.d.onCreateView(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at com.google.android.gms.maps.MapFragment.onCreateView(Unknown Source) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.Fragment.performCreateView(Fragment.java:1695) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:861) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1137) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.app.Activity.onCreateView(Activity.java:4735) 
06-21 12:06:10.322: E/AndroidRuntime(21020): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
06-21 12:06:10.322: E/AndroidRuntime(21020): ... 21 more 

這是我的android清單文件。

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

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

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

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

<uses-permission android:name="sp.com.permission.MAPS_RECEIVE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<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_FINE_LOCATION" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/my_icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="sp.com.RestaurantList" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="sp.com.DetailForm" /> 
    <activity android:name="sp.com.EditPreference" /> 
    <activity android:name="sp.com.AlarmActivity" /> 
    <activity android:name="sp.com.RestaurantMap" /> 

    <receiver 
     android:name="sp.com.OnBootReceiver" 
     android:enabled="false" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="sp.com.OnAlarmReceiver" /> 

    <meta-data 
     android:name="com.google.android.maps.v2.API Key" 
     android:value="--- the key ---" /> 
</application> 

這裏是我的map.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/restaurant_map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.MapFragment" /> 

這裏是我的restaurantmap.java活動。

package sp.com; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class RestaurantMap extends Activity { 
    // static final LatLng RESTAURANT = new LatLng(1.334611, 103.746836); 
    // static final LatLng KIEL = new LatLng(1.333522, 103.740286); 
    private GoogleMap map; 
    private double lat; 
    private double lon; 
    private String restaurantName; 
    private double myLat; 
    private double myLon; 

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

     lat = getIntent().getDoubleExtra("LATITUDE", 0); 
     lon = getIntent().getDoubleExtra("LONGITUDE", 0); 
     restaurantName = getIntent().getStringExtra("NAME"); 
     myLat = getIntent().getDoubleExtra("MYLATITUDE", 0); 
     myLon = getIntent().getDoubleExtra("MYLONGITUDE", 0); 

     LatLng RESTAURANT = new LatLng(lat, lon); 
     LatLng ME = new LatLng(myLat, myLon); 

     map = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.restaurant_map)).getMap(); 
     Marker restaurant = map.addMarker(new MarkerOptions().position(
       RESTAURANT).title(restaurantName)); 
     Marker me = map.addMarker(new MarkerOptions() 
       .position(ME) 
       .title("ME") 
       .snippet("My Location") 
       .icon(BitmapDescriptorFactory 
         .fromResource(R.drawable.ic_launcher))); 

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

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

} 

誰能幫我弄清楚我做錯了什麼?我仍然是java的初學者,非常感謝你的幫助。乾杯!

+0

首先需要正確配置谷歌播放服務庫 –

回答

0

這是繼承問題。如果你的xml中有一個標籤,那麼你的活動應該擴展FragmentActivity或者其他從FragmentActivity延伸出來的活動,比如actionBarActivity。

你也沒有一個所需的元數據標籤的谷歌播放服務。它應該是應用程序標記的直接子項。

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

嗨,當我添加此代碼時,我有錯誤: 錯誤:錯誤:找不到與給定名稱相匹配的資源('value'值爲'@ integer/GOOGLE_PLAY_SERVICES_VERSION')。 – user3599230

0

使用此代替你的元數據,我認爲android:name創建問題。不知道,但試試這一次,可能會工作。我還爲gps.add添加了一個標籤。

<meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
<meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="--- the key ---" /> 
0

您在這裏有一個錯字:

<meta-data 
    android:name="com.google.android.maps.v2.API Key" 
    android:value="--- the key ---" /> 

它應該是:

android:name="com.google.android.maps.v2.API_KEY" 

另外,不要張貼在公共論壇API密鑰!它應該是私人的。