当我尝试设置MapType时,MapFragment会在运行时使应用程序崩溃

时间:2014-10-24 17:05:28

标签: android crash runtime mapfragment

我在尝试更改Android应用程序中的GoogleMap类型时遇到了麻烦。我有一个基本的操作栏菜单,当我在操作栏中选择正确的选项时,我希望在我的活动中将地图放置为片段。这是我的代码:

package com.example.where2go;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {

    private MahMapFrag mapFragment;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {

            initializeMap();

        } catch (Exception e) {e.printStackTrace();}

    }

    private boolean initializeMap() {
        if (mapFragment == null) {

            mapFragment = new MahMapFrag();
            // check if map is created successfully or not
            try{
                if (mapFragment == null) {
                    Toast.makeText(getApplicationContext(),
                            "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                            .show();
                    return false;
                }
                else {
                    Log.d("MLOGS", "Map Intitialized");
                    return true;
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch(item.getItemId()) {
            case R.id.action_map:
                getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit();
                break;
            default:
                return false;
         }
         return true;
     }

}

这是我扩展MapFragment的类:

package com.example.where2go;

import android.util.Log;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;

public class MahMapFrag extends MapFragment {

    public MahMapFrag() {
        Log.d("MLOGS", "CONSTRUCT");
        //this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    }

}

当行

this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);

被评论,应用程序(似乎)运行顺利。但是当该行被取消注释时,如果我尝试在构造函数中更改地图的类型,当我点击我的操作栏时,应用程序崩溃

getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit();

我在com.where2go.MainActivity.onOptionItemSelected处有一个空指针异常。在设置地图类型时,我已经尝试了几个小时来弄清楚为什么我的mapFragment为null。

有人可以给我一个关于这个问题的线索和/或解释吗?我真的很想理解,因为我觉得我错过了一些对于进一步的android开发至关重要的事情....

我使用安装了Google Play服务的eclipse Juno和Genymotion,并使用API​​ 19进行编译。

谢谢

Qoya

1 个答案:

答案 0 :(得分:0)

确保你正在使用我发现帮助mah Case。 (参考你的MahMapFrag大声笑)

  

fragmentManager = getSupportFragmentManager();

将此添加到您的xml

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