MapFragment 不会加载

Posted

技术标签:

【中文标题】MapFragment 不会加载【英文标题】:MapFragment won't load 【发布时间】:2016-09-13 07:51:42 【问题描述】:

我只是想在我的 android 应用中查看地图,但遇到了一些麻烦。 我一直在关注几个教程,但仍然没有结果。 我从我的 sdk 管理器下载了 google play 服务并正确导入了 google_play_services_lib 我猜。 所以我使用我的包名和我的 SHA1 从 Google Api Console 创建了一个 Google Maps API 密钥,我使用 cmd 以及在 Eclipse 中的 window>preferences>android>build 中找到了它,我在两种方式中都得到了相同的 SHA1,所以我认为它是正确的.

所以我这样设置我的清单

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

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

<permission android:name="com.example.googlemapprova.permission.MAPS_RECEIVE"
     android:protectionLevel="signature"/>
<uses-permission android:name="com.example.googlemapprova.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-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="my api key" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <activity
        android:name=".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>

在我的布局文件中,我只创建了一个地图片段

    <fragment
    android:id="@+id/map"
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/textView1"
    android:layout_centerHorizontal="true" />

由于教程,我已将 android:name 更改为 class="com.google.android.gms.maps.SupportMapFragment"

然后是我的主要

package com.example.googlemapprova;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends FragmentActivity 

GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try 
        // Loading map
        initilizeMap();
        initializeUiSettings();
        initializeMapLocationSettings();
        initializeMapTraffic();
        initializeMapType();
        initializeMapViewSettings();

     catch (Exception e) 
        e.printStackTrace();
    


@Override
protected void onResume() 
    super.onResume();
    // initilizeMap();


private void initilizeMap() 

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

    // check if map is created successfully or not
    if (googleMap == null) 
        Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
    


public void initializeUiSettings() 
    googleMap.getUiSettings().setCompassEnabled(true);
    googleMap.getUiSettings().setRotateGesturesEnabled(false);
    googleMap.getUiSettings().setTiltGesturesEnabled(true);
    googleMap.getUiSettings().setZoomControlsEnabled(true);
    googleMap.getUiSettings().setMyLocationButtonEnabled(true);


public void initializeMapLocationSettings() 
    googleMap.setMyLocationEnabled(true);


public void initializeMapTraffic() 
    googleMap.setTrafficEnabled(true);


public void initializeMapType() 
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);


public void initializeMapViewSettings() 
    googleMap.setIndoorEnabled(true);
    googleMap.setBuildingsEnabled(false);

我从教程中获得了我的主要代码并对其进行了一些修改,这样我管理我的应用程序不崩溃(如果我不使用此代码,我的应用程序将崩溃)。 this is what i get 我正在使用摩托罗拉 moto g3 手机尝试一下 所以我试图从Play商店在我的手机上下载aLogcat,但我什么也没得到,也许我以错误的方式使用它。 this is the tutorial i used the most

有人可以帮我在我的应用上查看地图吗?我不明白为什么它不起作用 我现在正在尝试获取 Logcat

【问题讨论】:

你能读一下这个然后试试developers.google.com/maps/documentation/android-api/… 尝试检查此 SO 问题 17469661 和 15703245 中的代码是否可以帮助您。还要确保您正确引用了 google play services library 项目。 谢谢大家,我尝试使用 android studio 而不是 eclipse,一切都运行良好。在另一个堆栈溢出问题中,有人告诉 eclipse 无法正确读取元数据标签。所以现在我正在使用 android studio 并且它可以工作 【参考方案1】:

您的地图片段已加载,但地图内容未加载。

您将 API 密钥放在哪里?

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

【讨论】:

在应用程序节点中,就在活动节点之前 我想知道“我的 api 密钥”是故意在那里向我们隐藏你的 api 密钥,还是你的代码中就有这个? 在我的清单中,我的 api 密钥是我从 google api 控制台获得的密钥 好的。请您确认您是否再次生成了您的密钥 debug.keystore 并且您正在以调试模式启动应用程序? 是的,我的密钥正确,我的手机处于调试模式

以上是关于MapFragment 不会加载的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“Android.Support.V4.App.Fragment”转换为“Android.Gms.Maps.MapFragment”

MapFragment 在 getMapAsync(this) 方法中导致 NullPointerException

片段上的 Mapbox 膨胀视图

高度 MapFragment 布局不起作用

从另一个活动返回时,MapFragment 的地图加载滞后

用C#编写百度地图Android手机应用程序(第3讲)