Android 从“活动”中移动Mapfragment中的摄影机不会´;行不通
我有一个mapFragment,我想从我的活动中控制地图…例如。移动摄像机等,我还需要将数据推送到片段(例如LatLng)以更改地图 以下是我的代码和尝试运行应用程序时遇到的失败: 主要活动Android 从“活动”中移动Mapfragment中的摄影机不会´;行不通,android,dictionary,mapfragment,Android,Dictionary,Mapfragment,我有一个mapFragment,我想从我的活动中控制地图…例如。移动摄像机等,我还需要将数据推送到片段(例如LatLng)以更改地图 以下是我的代码和尝试运行应用程序时遇到的失败: 主要活动 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mapFragment mapFragment = new mapFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.content_main, mapFragment, "myMapFragement");
transaction.commit();
mapFragment.moveCamera(new LatLng(-3, 12));
}
MapFragment
public class mapFragment extends Fragment implements OnMapReadyCallback{
GoogleMap mGoogleMap;
MapView mMapView;
View mView;
//Konstruktor
public mapFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mView = inflater.inflate(R.layout.fragment_map, container, false);
return mView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mMapView = (MapView) mView.findViewById(R.id.mapView);
if(mMapView != null){
mMapView.onCreate(null);
mMapView.onResume();
mMapView.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(getContext());
mGoogleMap = googleMap;
mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// Add a marker in Sydney, Australia, and move the camera.
//LatLng sydney = new LatLng(-1, 151);
mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(-1, 55)).title("Marker in Sydney"));
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-1, 55)));
}
public void moveCamera(LatLng latLng){
if (mGoogleMap == null){
Log.i("map", "null");
}
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mGoogleMap.addMarker(new MarkerOptions().position(latLng).title("elsewhere"));
}
运行应用程序时出错
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ibas.locatix_teamviewer, PID: 3003
java.lang.RuntimeException: Unable to start activity ComponentInfo{ibas.locatix_teamviewer/ibas.locatix_teamviewer.MainActivity}: java.lang.NullPointerException: CameraUpdateFactory is not initialized
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: CameraUpdateFactory is not initialized
at com.google.android.gms.common.internal.zzac.zzb(Unknown Source)
at com.google.android.gms.maps.CameraUpdateFactory.zzJm(Unknown Source)
at com.google.android.gms.maps.CameraUpdateFactory.newLatLng(Unknown Source)
at ibas.locatix_teamviewer.mapFragment.moveCamera(mapFragment.java:78)
at ibas.locatix_teamviewer.MainActivity.onCreate(MainActivity.java:52)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.
知道如何处理吗?首先,在onCreateView中获取MapView:
mMapView = (MapView) mView.findViewById(R.id.mapView);
try {
MapsInitializer.initialize(getActivity());
}
catch (GooglePlayServicesNotAvailableException e) {
Log.e(LOG_TAG, "Have GoogleMap but then error", e);
return;
}
然后,初始化onCreateView中的映射:
mMapView = (MapView) mView.findViewById(R.id.mapView);
try {
MapsInitializer.initialize(getActivity());
}
catch (GooglePlayServicesNotAvailableException e) {
Log.e(LOG_TAG, "Have GoogleMap but then error", e);
return;
}
最后,错误出现在MainActivity中(请参阅logcat):
onCreate(MainActivity.java:52)
从活动中删除以下行:
mapFragment.moveCamera(新LatLng(-3,12))代码>
这会导致错误,因为您正在请求在地图准备就绪之前移动摄影机
幸好。我不明白。我的MapFragment在没有“moveCamera”方法(在活动中调用)的情况下工作。但是当尝试调用shell更新位置/移动摄影机的方法时,我得到了这个错误。我已经尝试了您的解决方案,但仍然遇到此异常(CameraFactory未初始化)。