【问题标题】:Google Maps v2 for Android 10 not working even when using SupportMapFragment即使使用 SupportMapFragment,适用于 Android 10 的 Google Maps v2 也无法正常工作
【发布时间】:2013-12-02 12:28:09
【问题描述】:

我将 google_play_services_lib 从 Eclipse extras 导入到我的 Workspace。 我创建了一个新的 Android 项目并将 google_play_services_lib 作为库包含在内。 我的项目有 android-support-v4.jar 和 google-play-services.jar

现在我的清单文件:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />
 <uses-permission android:name="android.permission.INTERNET" />

<!-- add for map2 -->
<permission
    android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

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

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.phanism.gingerbreadmaps.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>
</application>

</manifest>

我的 activity_main 是:

package com.phanism.gingerbreadmaps;
import com.google.android.gms.maps.SupportMapFragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

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

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMap().setMyLocationEnabled(true);
}

}

我的布局文件是:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
      android:name="com.phanism.MainActivity"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      class="com.google.android.gms.maps.SupportMapFragment"/>

当我在模拟器中编译上述代码时,系统会要求我更新 Google Play 商店。当我按确定时,我收到此错误。 在设备上,我的应用程序直接崩溃,当我查看调试时,这是我得到的错误。

12-03 08:43:06.851: E/AndroidRuntime(620): FATAL EXCEPTION: main
12-03 08:43:06.851: E/AndroidRuntime(620): java.lang.NullPointerException
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1409)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.Activity.startActivityForResult(Activity.java:3351)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.Activity.startActivityForResult(Activity.java:3312)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:824)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.Activity.startActivity(Activity.java:3522)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.Activity.startActivity(Activity.java:3490)
12-03 08:43:06.851: E/AndroidRuntime(620):  at com.google.android.gms.dynamic.a$5.onClick(Unknown Source)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.view.View.performClick(View.java:4084)
12-3 08:43:06.851: E/AndroidRuntime(620):   at android.view.View$PerformClick.run(View.java:16966)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.os.Handler.handleCallback(Handler.java:615)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.os.Handler.dispatchMessage(Handler.java:92)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.os.Looper.loop(Looper.java:137)
12-03 08:43:06.851: E/AndroidRuntime(620):  at android.app.ActivityThread.main(ActivityThread.java:4745)
12-03 08:43:06.851: E/AndroidRuntime(620):  at java.lang.reflect.Method.invokeNative(Native Method)
12-03 08:43:06.851: E/AndroidRuntime(620):  at java.lang.reflect.Method.invoke(Method.java:511)
12-03 08:43:06.851: E/AndroidRuntime(620):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-03 08:43:06.851: E/AndroidRuntime(620):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-03 08:43:06.851: E/AndroidRuntime(620):  at dalvik.system.NativeStart.main(Native Method)

谁能指出我做错了什么。

【问题讨论】:

标签: java android eclipse google-maps android-2.3-gingerbread


【解决方案1】:

apikeyservice version 这样怎么样

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR API KEY" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

请把它放在你的 ma​​nifest.xml 文件和re run你的代码中会发生什么。

请发布错误消息或 logcat。

编码愉快!

【讨论】:

    【解决方案2】:

    将此添加到您的清单文件中:

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

    希望这会有所帮助。

    【讨论】:

    • 当我将上述代码添加到清单文件时,我得到:错误:错误:找不到与给定名称匹配的资源(在“值”处,值为“@integer/google_play_services_version”)。
    【解决方案3】:

    嘿嘿把下面的代码添加为应用标签的子元素

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

    希望这会对您有所帮助,如果不是像 @Siddarth Vyas 所说的那样添加 google play services 版本,那么它应该可以工作。

    编辑

    同时更改片段标签的 xml 代码

    应该是

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

    而不是

    class="com.google.android.gms.maps.SupportMapFragment"
    

    我希望它能解决您的问题,因为这是我从工作示例代码中看到的对您的代码的唯一更改。

    【讨论】:

    • 我做了,但我得到了 NullPointException。
    【解决方案4】:

    我得到了这个问题的答案。分配 GoogleMap 应该是下面提到的 if 条件

    if(googleMap == null){
            GoogleMapOptions options = new GoogleMapOptions();
            options.compassEnabled(true).mapType(GoogleMap.MAP_TYPE_NORMAL).zoomControlsEnabled(true).rotateGesturesEnabled(true);
    
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            SupportMapFragment.newInstance(options);
            googleMap = mapFragment.getMap();
    
            if(googleMap != null){
                googleMap.setMyLocationEnabled(true);
    
                double latitude = 35.1;
                double longitude = 43.9;
    
                MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("This Works");
                googleMap.addMarker(marker);
    
            }
        }
    

    如果没有 if 条件,我会收到 NullPointerException。 如果我不添加,

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

    我收到 Fragment 类错误。

    【讨论】:

      【解决方案5】:
      <uses-feature
          android:glEsVersion="0x00020000"
          android:required="true" />
      <application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
          <activity
              android:name="com.phanism.gingerbreadmaps.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="MY API NUMBER" />**
      
      </application>
      
      </manifest>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 2017-05-02
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多