Android Map View未加载内容

时间:2013-03-11 16:53:25

标签: java android google-maps android-mapview

首先,我知道这里有许多关于这个问题的线索,但是我把它们都读了,并尝试了几乎所有的东西。 那我的问题是什么。我正在使用谷歌地图开发一个应用程序,我也发生了一个众所周知的问题,即mapView加载正常,但它什么都没有(只有灰色的空白矩形)。

以下是我的尝试:

  • 我试图检查我的API代码
  • 我重新生成了我的API代码
  • 我检查所有的permmisions
  • 还有很多其他的东西

main_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:enabled="true"
    android:apiKey="my key"/>

</RelativeLayout>

清单:

<?xml version="1.0" encoding="utf-8"?>

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

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

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />



    <application

        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <uses-library android:name="com.google.android.maps"/> 
        <activity
            android:name="com.gps.gpsclientsoftware.GPSClientActivity"
            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>

活动代码:

package com.gps.gpsclientsoftware;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class GPSClientActivity extends MapActivity {

    private MapView mapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);


    }


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

}

我在启动应用时发现的一个警告是:

03-11 17:51:03.751: E/MapActivity(8581): Couldn't get connection factory client

希望你能帮助我。

4 个答案:

答案 0 :(得分:3)

检查一下......

http://ucla.jamesyxu.com/?p=287

您需要覆盖所有方法。不要错过任何人。

我做到了,我得到了一个有效的MapView。

(onLowMemory似乎可以跳过。)

(MapView比MapFragment效果更好。)

答案 1 :(得分:1)

正如hsu.tw所指出的,我们需要从片段生命周期方法中调用 MapView 的生命周期方法。

MapView 部分布局文件导致问题为 onCreate 在充气片段布局之前调用[因此MapView's onCreate()永远不会被调用]。

以下方法对我有用。 [如果要将此片段添加到BackStack ,可能需要注意删除MapView

class MapFragment : BaseFragment() {

    var mapView: MapView? = null

    override fun getFragmentLayout() = R.layout.fragment_map

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        (view as? LinearLayout)?.addView(mapView, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT))
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // create map view
        mapView = MapView(context /*, GoogleMapOption for configuration*/)
        mapView?.onCreate(savedInstanceState)
    }

    override fun onStart() {
        super.onStart()
        mapView?.onStart()
    }

    override fun onPause() {
        super.onPause()
        mapView?.onPause()
    }

    override fun onResume() {
        super.onResume()
        mapView?.onResume()
    }

    override fun onSaveInstanceState(outState: Bundle?) {
        super.onSaveInstanceState(outState)
        mapView?.onSaveInstanceState(outState)
    }

    override fun onStop() {
        super.onStop()
        mapView?.onStop()
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mapView?.onLowMemory()
    }

    override fun onDestroy() {
        super.onDestroy()
        mapView?.onDestroy()
    }
}

答案 2 :(得分:0)

自2012年12月起,Google发布了Google地图第2版。 这意味着新应用程序应使用此版本,并且仅为v2映射提供api密钥。
您的实施似乎适用于谷歌地图v1 请查看here以获取详细指南,但是从快速查看我发现您的Android清单中缺少以下内容:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="your_api_key"/>
<permission
        android:name="your.project.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

<uses-permission android:name="your.project.permission.MAPS_RECEIVE" />
<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="your key" />

另外,要在手机上运行谷歌地图,您需要安装谷歌播放服务。为了检查它是否已经安装并且google maps v2在您的设备上运行,我建议使用使用trulia等v2地图的应用程序。

答案 3 :(得分:-3)

使用您的实际API密钥替换清单中的“我的密钥”。

android:apiKey="my key"/>

此处可以输入API密钥: https://developers.google.com/maps/documentation/android/start#obtaining_an_api_key