android - 调用 moveCamera Google 地图时应用程序崩溃
问题描述
我正在尝试调用 moveCamera,但我的应用程序崩溃了。我收到了来自 Intent extra 的 latlng。我知道额外的东西即将到来,因为我打印它更新了一个编辑文本。我尝试过自己输入不同的坐标,但没有任何效果。这是我的错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mmitm, PID: 28348
java.lang.RuntimeException: Unable to resume activity {com.example.mmitm/com.example.mmitm.MapActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3645)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)' on a null object reference
at com.example.mmitm.MapActivity.receiveData(MapActivity.java:136)
at com.example.mmitm.MapActivity.onResume(MapActivity.java:111)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354)
at android.app.Activity.performResume(Activity.java:7079)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这是我的地图活动,我称之为 movecamera
//onResume Method check which fragment intent is sent from
@Override
protected void onResume() {
super.onResume();
//make sure extras are not null
Bundle extras = getIntent().getExtras();
if (extras != null) {
this.receiveData();
Toast.makeText(this, "Received Data", Toast.LENGTH_SHORT).show();
}
}
private void receiveData() {
//RECEIVE DATA VIA INTENT
Intent i = getIntent();
if(i != null)
{
LatLng locationOne = i.getParcelableExtra("LOC_ONE");
LatLng locationTwo = i.getParcelableExtra("LOC_TWO");
Toast.makeText(this, "LocOne = " + locationOne + ", LocTwo = " + locationTwo, Toast.LENGTH_LONG).show();
//SET DATA TO TEXTVIEWS
locOne.setText(locationOne.toString());
locTwo.setText(locationTwo.toString());
// move camera to location one
Log.d(TAG, "receiveData: calling moveCamera");
//Map Crashes when trying to move camera
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(locationOne,15));
}
}
还有我的 MoveCamera 功能
private void moveCamera(LatLng latLng, float zoom){
Log.d(TAG, "moveCamera: moving the camera to: lat: " + latLng.latitude + ", lng: " + latLng.longitude );
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
}
这是我的第一个 android 应用程序,所以任何帮助表示赞赏!
解决方案
它显然崩溃了,因为mMap
is NULL
。
if(this.getIntent() != null && mMap != null) {
...
}
只是仔细看看;您需要处理意图onMapReady()
:
@Override
public void onMapReady(GoogleMap map) {
this.mMap = map;
if(this.getIntent() != null && this.getIntent().getAction() == INTENT_ACTION_LOCATION_SELECT) {
/* your code goes here */
} else {
/* regular initialization */
}
}
whereonResume()
可能需要从SupportMapFragment
.
推荐阅读
- c++ - 在 QObject 之外使用 QTimer
- python - multiprocess.Queue.get() 在 python 中需要很长时间
- java - Android Studios breakiterator,仅使用空格来中断文本
- android - 为什么我不能在 Android N+ 中附加文件?
- java - Control+Break 上的线程转储不完整
- python - 自编码器中 conv2d 层的形状大小不匹配
- android - Android Activity 类是否违反单一职责原则?
- audio - 如何将 Adafruit SPH0645 I2S 连接到 nanopi neo 空气板
- webpack - less-loader 错误地解析 globalVars 中的版本号
- c++ - 如何在基类中创建子类对象