最近我将项目从Eclipse迁移到Android Studio.除了我的一个使用SupportMapFragment的片段外,一切都设置正常.下面的findFragmentById(在Eclipse中构建时工作)现在返回null :(
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SupportMapFragment m = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.safety_map));
Run Code Online (Sandbox Code Playgroud)
xml的片段...
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/safety_map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="40dp"
map:cameraTargetLat="@string/livesafe_latitude"
map:cameraTargetLng="@string/livesafe_longitude"
map:uiZoomControls="false"
class="com.google.android.gms.maps.SupportMapFragment"/>
Run Code Online (Sandbox Code Playgroud)
这是我的build.gradle中的依赖项:
dependencies {
//google analytics
compile 'com.google.apis:google-api-services-analytics:v3-rev103-1.19.0'
//support library for api 10
compile 'com.android.support:support-v4:21.0.0'
//google play services
compile 'com.google.android.gms:play-services:6.1.11'
compile project(':facebook')
compile files('libs/android-support-multidex.jar')
compile files('libs/aws-android-sdk-1.6.0-debug.jar')
compile files('libs/FlurryAnalytics_3.3.2.jar')
}
Run Code Online (Sandbox Code Playgroud)
我没有更改以前在Eclipse中工作的xml文件或Fragment类中的任何代码.
所以我有一个包含地图片段的空片段.每当我尝试激活包含地图的片段时,我的应用程序崩溃并在此行返回空指针错误:
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
Run Code Online (Sandbox Code Playgroud)
完整错误消息:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.MapFragment.getMap()' on a null object reference
at com.collusion.serviceassistant.ReturnVisitDetails.onViewCreated(ReturnVisitDetails.java:39)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
Run Code Online (Sandbox Code Playgroud)
这是我的片段代码:
import android.app.Activity;
import android.app.Dialog;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.model.BitmapDescriptorFactory; …Run Code Online (Sandbox Code Playgroud) MapView的getMap()方法可以返回null.我知道这是Google的预期行为.
有人可以提供关于何时以及在何种情况下该方法返回null 的明确描述getMap()?
我知道如果Google服务在给定设备上不可用,getMap()则会返回null.这种可能性相对较好地记录在案.我更关注模糊的其他情况,即使在设备上安装Google服务,getMap()仍然可以返回null.
到目前为止,我的假设是底层地图系统有一些初始化,在此期间您的代码可能会执行并获得一个空地图.
我的假设是否正确?
在Activity或Fragment生命周期中是否有任何特定的位置我们可以明确地获得非null GoogleMap(如果我们假设安装了Google Services IS)?
我提出这个问题的目的是防止if(mapView.getMap() != null)在我的代码中散布一连串的支票.此外,这个问题似乎依然拿出定期在这里StackOverflow上,我想看看我们是否能够割肉出局的背后究竟是怎么回事用真情MapView和getMap()
在Android 4.4中测试基于位置的应用时,我们能够通过Android地图v2正确查看和使用地图
自从我升级到Android L以来,它无法使用以下代码获取MapFragment:
在MainActivity中有一个FrameLayout,我在其中加载ShowMapFragment.
在ShowMapFragment中有一个MapFragment来显示地图.
在'OnCreateView()'方法内
mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
map = mapFragment.getMap();
mapFragment将为null.对此有何帮助?
android google-maps google-play-services android-maps-v2 android-5.0-lollipop