android - I get java.lang.NullPointerException when onBackPressed in Activity have a MapFragment -
i have activity display googlemap custom fragment. every thing display correctly, when click on button activity, there android error alert message , 'java.lang.runtimeexception: unable destroy activity (...myactivity}: java.lang.nullpointerexception'. logcat no point anywhere in code, can't find root of problem.
here logcat:
06-04 06:41:04.206 30479-30479/xxx e/androidruntime﹕ fatal exception: main java.lang.runtimeexception: unable destroy activity {xxx.infoactivity}: java.lang.nullpointerexception @ android.app.activitythread.performdestroyactivity(activitythread.java:3624) @ android.app.activitythread.handledestroyactivity(activitythread.java:3642) @ android.app.activitythread.access$1200(activitythread.java:156) @ android.app.activitythread$h.handlemessage(activitythread.java:1393) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:153) @ android.app.activitythread.main(activitythread.java:5299) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:833) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:600) @ dalvik.system.nativestart.main(native method) caused by: java.lang.nullpointerexception @ com.google.maps.api.android.lib6.d.ai.d(unknown source) @ com.google.android.gms.maps.internal.x.ontransact(sourcefile:129) @ android.os.binder.transact(binder.java:310) @ com.google.android.gms.maps.internal.imapfragmentdelegate$zza$zza.ondestroyview(unknown source) @ com.google.android.gms.maps.mapfragment$zza.ondestroyview(unknown source) @ com.google.android.gms.dynamic.zza.ondestroyview(unknown source) @ com.google.android.gms.maps.mapfragment.ondestroyview(unknown source) @ android.app.fragment.performdestroyview(fragment.java:1893) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:949) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1057) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1039) @ android.app.fragmentmanagerimpl.dispatchdestroy(fragmentmanager.java:1868) @ android.app.activity.performdestroy(activity.java:5290) @ android.app.instrumentation.callactivityondestroy(instrumentation.java:1112) @ android.app.activitythread.performdestroyactivity(activitythread.java:3611) here activity code:
public class infoactivity extends appcompatactivity { toolbar actionbartoolbar; citymapfragment citymapfragment; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_news_info); actionbartoolbar = (toolbar)findviewbyid(r.id.event_info_toolbar); setsupportactionbar(actionbartoolbar); actionbartoolbar.setnavigationicon(r.mipmap.ic_action_direction); actionbartoolbar.setnavigationonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { } }); fragmentmanager fm = getfragmentmanager(); fragmenttransaction ft = fm.begintransaction(); citymapfragment = citymapfragment.getnewinstance(savedinstancestate); ft.add(r.id.layoutmapevent, citymapfragment); ft.commit(); } @override public void onbackpressed() { super.onbackpressed(); } @override protected void onpause() { super.onpause(); citymapfragment.onpause(); } @override protected void onstop() { super.onstop(); citymapfragment.onstop(); } @override protected void onresume() { super.onresume(); citymapfragment.onresume(); } @override protected void ondestroy() { super.ondestroy(); citymapfragment.ondestroy(); } } here citymapfragment code:
public class citymapfragment extends fragment implements onmapreadycallback{
public static citymapfragment getnewinstance(bundle savedinstancestate) { citymapfragment citymapfragment = new citymapfragment(); citymapfragment.oncreate(savedinstancestate); return citymapfragment; } public googlemap googlemap; public mapfragment mapfragment; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view v = inflater.inflate(r.layout.map_fragment_layout, container, false); mapinit(savedinstancestate); return v; } @override public void onmapready(googlemap _googlemap) { this.googlemap = _googlemap; googlemap.setmylocationenabled(true); googlemap.getuisettings().setmylocationbuttonenabled(true); googlemap.setonmapclicklistener(new googlemap.onmapclicklistener() { @override public void onmapclick(latlng latlng) { toast.maketext(getactivity(), "tap", toast.length_short).show(); } }); } private void mapinit(bundle savedinstancestate) { if(googlemap == null) { switch (googleplayservicesutil.isgoogleplayservicesavailable(getactivity())) { case connectionresult.success: mapsinitializer.initialize(getactivity()); mapfragment = (mapfragment)getfragmentmanager().findfragmentbyid(r.id.mapfragmentid); mapfragment.oncreate(savedinstancestate); if(mapfragment != null) { mapfragment.getmapasync(this); } toast.maketext(getactivity(), "succes", toast.length_short).show(); break; case connectionresult.service_missing: toast.maketext(getactivity(), "service missing", toast.length_short).show(); break; case connectionresult.service_version_update_required: toast.maketext(getactivity(), "update required", toast.length_short).show(); break; default: toast.maketext(getactivity(), googleplayservicesutil.isgoogleplayservicesavailable(getactivity()), toast.length_short).show(); } } /*if(googlemap != null) { mapsetting(); }*/ } public void setmarkerandfocus(latlng latlg, string text) { googlemap.addmarker(new markeroptions().position(latlg).title(text)); focuslocation(latlg); } public void setmarker(latlng latlg, string text) { } public void focuslocation(latlng latlg) { cameraupdate cameraupdate = cameraupdatefactory.newlatlngzoom(latlg, 15); googlemap.animatecamera(cameraupdate); } @override public void onresume() { super.onresume(); mapfragment.onresume(); } @override public void onpause() { super.onpause(); mapfragment.onpause(); } @override public void onstop() { super.onstop(); mapfragment.onstop(); } @override public void onlowmemory() { super.onlowmemory(); mapfragment.onlowmemory(); } @override public void ondestroyview() { super.ondestroyview(); } @override public void ondestroy() { super.ondestroy(); mapfragment.ondestroy(); } } think problem in
ft.add(r.id.layoutmapevent, citymapfragment); ft.commit(); because when remove code, there no java.lang.nullpointerexception throw. want display map on activity, can't remove activity. take me 2 days, can't resolve correctly.
thank anyhelp!!!!
try removing ondestroyview() method citymapfragment. when activity destroyed, fragment automatically destroyed too. hence,there's no need it.
Comments
Post a Comment