【问题标题】:Android google map v2 error at marker's icon标记图标处的 Android google map v2 错误
【发布时间】:2013-09-13 13:16:13
【问题描述】:

我尝试实施谷歌地图 v2,但我得到的只是错误。我遵循了这些教程:http://www.vogella.com/articles/AndroidGoogleMaps/article.htmlhttp://blog-emildesign.rhcloud.com/?p=435 好吧,我已经完成了教程中的所有操作(我使用 google api 8,所以有时我不得不更改一些东西 - 例如 SupportFragmentManager 而不是 FragmentManager) 我的活动(修改了 Lars Vogel 的示例):

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

import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.SupportMapFragment;
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 MapActivity extends FragmentActivity {

      static final LatLng HAMBURG = new LatLng(53.558, 9.927);
  static final LatLng KIEL = new LatLng(53.551, 9.993);
  private SupportMapFragment map;
  private GoogleMap mMap;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    try {
        MapsInitializer.initialize(this);
    } catch (GooglePlayServicesNotAvailableException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
    mMap = map.getMap();
    Marker hamburg = mMap.addMarker(new MarkerOptions().position(HAMBURG)
        .title("Hamburg"));
    Marker kiel = mMap.addMarker(new MarkerOptions()
        .position(KIEL)
        .title("Kiel")
        .snippet("Kiel is cool")
        .icon(BitmapDescriptorFactory
            .fromResource(R.drawable.ic_launcher)));


    // Move the camera instantly to hamburg with a zoom of 15.
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

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

}

我的布局:

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

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

</RelativeLayout> 

我在 Marker hamburg 获得了 NPE。当我注释掉这一行时,我在 Marker kiel 处收到下一个错误 - ibitmapdescriptorfactory 未初始化。所以我猜这是 Marker 上 .icon 方法的问题——在汉堡的情况下它是空/默认的,而在第二种情况下没有初始化。我不知道如何解决这个问题。

【问题讨论】:

标签: android google-maps-api-2


【解决方案1】:

你应该通过这个检查:

GoogleMap map;    

map = ((SupportMapFragment) getSupportFragmentManager().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)));
}

【讨论】:

  • 现在我必须在我的模拟器上激活 google play 服务,但现在我猜这是不同的问题; ))
【解决方案2】:

我认为您所需要的只是对地图初始化进行一系列空值检查,就像这样。

GoogleMap mMap = null;

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
//map part 
        if(mMap == null) {
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
            if(gMap != null) {
                gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                    Marker hamburg = mMap.addMarker(new MarkerOptions().position(HAMBURG)
    .title("Hamburg"));
                }
        }
}

【讨论】:

    【解决方案3】:

    试试……

    mMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getExtendedMap();
    

    【讨论】:

    • 我不能,因为 Eclipse 告诉我将 mMap 的类型更改为 SupportMapFragment 而不是 GoogleMap
    • 好的。尝试 getFragmentManager() 而不是 getSupportFragmentManager()。我想这不是问题,您正在使用 SupportMapFragment。
    【解决方案4】:

    获取最新的

    // Declaration
        private GoogleMap googleMap;
        private SupportMapFragment mapFragment;
    

    活动

    public class GetDirection extends AppCompatActivity implements OnMapReadyCallback {
    
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activiy_layout);
    
            // check for permission if required for Android MarsMallow
            // then 
            initilizeMap();
        }
    }
    

    初始化

    /**
         * function to load map. If map is not created it will create it for you
         * */
        private void initilizeMap() {
            if (googleMap == null) {
                mapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
                        R.id.map));
                try {
                    mapFragment.getMapAsync(this);
                }
                catch (RuntimeRemoteException e)
                {
                    // handle exception
                }
    
    
            }
        }
    

    onMapReady

        //    It provides a non-null instance of GoogleMap
            @Override
            public void onMapReady(GoogleMap googleMap) {
                this.googleMap = googleMap;
    
                // Now add marker
                Marker kiel = googleMap.addMarker(new 
                MarkerOptions().position(HAMBURG)
               .title("Hamburg"));
                Marker kiel = googleMap.addMarker(new MarkerOptions()
               .position(KIEL)
               .title("Kiel")
               .snippet("Kiel is cool")
               .icon(BitmapDescriptorFactory
               .fromResource(R.drawable.ic_launcher)));
    
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-02
      • 2016-10-12
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多