Android SupportMapFragment异常错误
我正在尝试使用新的Google Play服务库,并在下面的地图片段中添加地图 PlaceMapsFragment.javaAndroid SupportMapFragment异常错误,android,android-support-library,google-play-services,mapfragment,supportmapfragment,Android,Android Support Library,Google Play Services,Mapfragment,Supportmapfragment,我正在尝试使用新的Google Play服务库,并在下面的地图片段中添加地图 PlaceMapsFragment.java public class PlaceMapsFragment extends SupportMapFragment { private GoogleMap mMap; private LatLng mPosFija; public PlaceMapsFragment() { super(); } public st
public class PlaceMapsFragment extends SupportMapFragment {
private GoogleMap mMap;
private LatLng mPosFija;
public PlaceMapsFragment() {
super();
}
public static PlaceMapsFragment newInstance(LatLng posicion) {
PlaceMapsFragment frag = new PlaceMapsFragment();
frag.mPosFija = posicion;
return frag;
}
@Override
public GoogleMap getMap() {
// TODO Auto-generated method stub
return super.getMap();
}
@Override
public void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
//initMap();
return view;
}
private void initMap() {
UiSettings settings = getMap().getUiSettings();
settings.setAllGesturesEnabled(false);
settings.setMyLocationButtonEnabled(false);
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16));
getMap().addMarker(
new MarkerOptions().position(mPosFija)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.marker)));
}
}
错误
12-10 01:44:54.416: E/AndroidRuntime(32716): FATAL EXCEPTION: main
12-10 01:44:54.416: E/AndroidRuntime(32716): java.lang.NullPointerException
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.ar.b.a(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.h.a(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.au.a(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.ae.moveCamera(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub.onTransact(IGoogleMapDelegate.java:83)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Binder.transact(Binder.java:297)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceMapsFragment.initMap(PlaceMapsFragment.java:55)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceMapsFragment.onCreateView(PlaceMapsFragment.java:46)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceActivity$TabManager.onTabChanged(PlaceActivity.java:153)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:379)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost.setCurrentTab(TabHost.java:364)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.view.View.performClick(View.java:3591)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.view.View$PerformClick.run(View.java:14263)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Handler.handleCallback(Handler.java:605)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Handler.dispatchMessage(Handler.java:92)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Looper.loop(Looper.java:137)
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.app.ActivityThread.main(ActivityThread.java:4507)
12-10 01:44:54.416: E/AndroidRuntime(32716): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 01:44:54.416: E/AndroidRuntime(32716): at java.lang.reflect.Method.invoke(Method.java:511)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-10 01:44:54.416: E/AndroidRuntime(32716): at dalvik.system.NativeStart.main(Native Method)
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.m7.nomad"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<permission
android:name="com.example.newmapview.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock" >
<activity
android:name="com.m7.nomad.SplashActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.m7.nomad.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>
<activity
android:name="com.m7.nomad.PlaceActivity"
android:label="@string/app_name" >
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="XXXXXXXXXXX" />
</application>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
</manifest>
我有一个SherlockFragmentActivity,它有一个TabHost,有两个片段连接到它。我正试图在其中一个选项卡片段中渲染贴图
编辑
我已经得到了要显示的地图,但现在我无法参考地图并将地图更改为混合。基本上,我需要引用映射而不获取空错误。我不知道这是否有帮助,但您应该在此处设置您的包:
<permission
android:name="com.example.newmapview.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" />
在onCreateView()
中,必须调用其父级。近距离查看我的解决方案。映射在MapFragment的onCreateView()方法中初始化,如果不调用它,映射将为null
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);
// Do any other initialization you need, but note that the MapView already exists inside v
setUpMapIfNeeded(v);
return v;
}
导入Google Play服务库时,我通过选中“将项目复制到工作区””来解决此错误。
更多信息请点击此处:查看此链接。简单地说,您需要添加整个模块文件夹google-play-services_lib,而不仅仅是google-play-services.jar。@jumper0k我已经添加了这样一个信息:在xml中,您正在使用MapView,在SetupMapiFneed中的代码中,您需要尝试按id查找片段。您应该按id查找视图。有关MapView,请参阅示例“原始MapView”@我只是想试试。当我在RawMap中使用代码时,我得到的方法findviewbyd(int)对于typedam是未定义的。我真傻。但我仍然得到一个空指针异常。我主要想弄清楚的是,如何通过代码将地图填充到布局中。要将地图填充到布局中,请尝试使用MapView。你的意思是这样的吗?我还需要在这里添加api密钥吗?不,这是旧的API。这是新的:看看地图样本,在你的google\u play\u services文件夹中。似乎不起作用。更新了我的代码和错误消息。在试图找出如何让它工作之后。所有演示都使用FragmentActivity,但没有一个通过SupportFragmentActivity实现。我使用片段是因为我在一个TabHost中填充地图,该TabHost承载两个Fragmetn我如何在同一个视图中设置视图?当我没有提到布局或初始化MapView时,我如何获得对它的引用SupportMapFragment已经设置了自己的视图。如果要添加自己的视图,可以保留对super.onCreateView()返回值的引用。您不需要对MapView的引用。只需GoogleMap,您可以通过调用片段上的getMap()获得它。非常感谢。我简化了布局,删除了对地图的所有引用,它开始工作了。现在,如果我想将地图设置为不同类型的地图,如何引用地图?如果我尝试这样做,我会得到一个空错误,我认为我遗漏了什么。当我选择“地图”选项卡时,我正在加载PlaceMapsFragment。所以我也不确定我应该推荐哪位家长。你能指出你指的是哪一行吗?我已经更新了问题中的代码。如果我在正确的轨道上,请给我指路。罗伊:我把地图弄好了。但是现在我需要引用地图视图并向地图添加功能。如何在SupportMapFragment中设置Ceter或更改映射类型。我使用了与您相同的代码,但仍然面临空指针异常。在我的代码中,当在onCreateView()内执行initMap()时,映射已经初始化(因为我首先调用了super.onCreateView()。然后,你可以用地图做任何你需要做的事情。在我的代码中,我更改了一些设置,如手势和相机位置,并添加了一个标记。检查该类的文档,看看你能用它做些什么。我想我不需要过度使用onCreateView()并通过onCreate()执行它,但我仍然会遇到同样的错误。知道如何从扩展SupportMapFragment的类中启动它吗