我正在尝试在 Kotlin 中编写我当前的应用程序,但我得到 null 无法转换为非 null 类型。我尝试了很多不同的东西,但我一直遇到同样的问题。不知道该怎么办。任何帮助,将不胜感激!
代码:
class MapsActivity : AppCompatActivity(), OnMapReadyCallback {
private lateinit var mMap: GoogleMap
private lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.mapFragment) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap;
setUpMap();
}
fun setUpMap() {
val et = findViewById<EditText>(R.id.editText);
val et2 = findViewById<EditText>(R.id.editText2);
val lat = et.getText().toString().toDouble();
val lng = et2.getText().toString().toDouble();
//val ll = LatLng(lat, lng)
button = findViewById(R.id.button) as Button
button.setOnClickListener …Run Code Online (Sandbox Code Playgroud) 我知道差异,因为我正在开发一个应用程序,我将介绍谷歌地图API v2用于编译Android 2.3以上.我应该使用哪个?
我有一个扩展SupportMapFragment的类,我从后端加载一些数据并显示标记.我还有另一个片段,我在地图上显示与所选标记相对应的细节.我正在以纵向模式在地图下方显示细节片段,并在横向中并排显示.
public class MapDisplayFragment extends SupportMapFragment {
private ArrayList<ShowLocation> locations = null;
public void onViewCreated(View view, Bundle savedInstanceState) {
if (savedInstanceState != null) {
locations = (ArrayList<ShowLocation>)savedInstanceState.getSerializable("LOCATIONS");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState == null) {
outState = new Bundle();
}
outState.putSerializable("LOCATIONS", locations);
super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现Serializable的类,它在派生的map类中使用.我使用onSaveInstanceState来存储对象,这样我就不必再从后端检索数据.但应用程序崩溃与java.lang.RuntimeException:Parcelable遇到ClassClassNotFoundException当我翻转设备时读取Serializable对象.
public class ShowLocation implements Serializable {
private String geoCodeLat = Constants.EMPTY_STRING;
private String geoCodeLng = Constants.EMPTY_STRING;
....
public String getGeoCodeLat() {
return geoCodeLat;
}
public void …Run Code Online (Sandbox Code Playgroud) 我有一个地图活动(SherlockFragmentActivity)加载在地图片段中,该片段有2个按钮,并在显示2个不同片段之间切换(GoogleMapFragment和ScaleImageViewFragment)
当我点击Exhibitor Map按钮时它会替换片段,但是当我点击后面我得到一个"java.lang.IllegalStateException:Activity已被销毁"错误
ERROR/AndroidRuntime(5768): FATAL EXCEPTION: main
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at com.takeit2eleven.towniemeeting.android.fragments.GoogleMapFragment.onCreateView(GoogleMapFragment.java:42)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是我的MapsFragment.java文件:
public class MapsFragment extends SherlockFragment {
Button mHotelMapButton;
Button mExhibitorButton;
GoogleMapFragment mGoogleMapFragment;
ScaleImageViewFragment mScaleImageViewFragment;
static boolean mShowingGoogleMap = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if …Run Code Online (Sandbox Code Playgroud) android android-fragments android-activity mapfragment supportmapfragment
我已经实现了一个MapFragment在运行时添加的活动.该MapFragmentXML有静态的fragment,我试图让添加在运行时.我还发现Lollipop在运行时添加了地图片段存在一些问题.请检查问题和临时解决方案
我也在下面给出了我的代码,
fragment_map.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.MapsFragment">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="appCreators.bloodfinder.activity.MapsActivity"/>
<include
android:id="@+id/layout"
layout="@layout/template_custom_spinner"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
MapsFragment.java
器物 onMapReadyCallback
public class MapsFragment extends SupportMapFragment implements OnMapReadyCallback
Run Code Online (Sandbox Code Playgroud)
在onResume回调中
@Override
public void onResume() {
super.onResume();
((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
}
Run Code Online (Sandbox Code Playgroud)
这总是给我null,我也尝试过,
((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
Run Code Online (Sandbox Code Playgroud)
这也回归了 NullPointerException
MapsActivity.java
getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, MapsFragment.newInstance()).commit();
Run Code Online (Sandbox Code Playgroud)
我在onCreateActivity回调方法中添加了这个.
我无法弄清楚为什么我还在这里NullPointerException!
有时我得到 Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference
帮助将不胜感激!
更新:仍然没有修复我收到以下错误.我查看了日志,但不知道为什么会发生这种情况. …
android nullpointerexception mapactivity android-fragments supportmapfragment
我的应用程序有三个不同的活动使用a SupportMapFragment.启动应用程序后第一次加载会出现重大延迟.即使我返回并访问完全不同的Activity(也包含地图),后续加载时也不会出现这种缓慢的加载时间.我想知道这是否是我能解决的问题.
这个要点显示了我如何加载SupportMapFragment.使用调试点我已经确定缓慢发生在onViewCreated和之间onStart.
更新1:使用Debug我已经采取了第一次加载和第二次加载的两条痕迹.第二个负载是完全不同的Activity.我很快注意到第一个跟踪(慢速加载)有很多调用java/util/zip/zipEntry.在第二个跟踪中我没有看到任何类似的调用.此外,这种延迟现象之间onCreateView和onViewCreated的MapFragment的.
更新2:这也发生在MapFragment(不支持),但延迟实际上要长得多.
我有一个gps应用程序在我的手机上正常工作.但是,我看到有人在制作中有空指针异常.
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = fm.getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
googleMap.setPadding(0, 0, 0, 90);
Run Code Online (Sandbox Code Playgroud)
我从生产中得到的错误是由:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
所以我做了一些研究,发现getMap方法已被删除,人们推荐使用 getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap; //which doesn't seem to work
}
Run Code Online (Sandbox Code Playgroud)
但是,我googleMap在许多不同的方法中引用变量,我无法将所有代码移动到onMapReady方法.我尝试this.googleMap = googleMap在onMapReady方法内部使用,但每当我尝试引用googleMap变量时,我仍然会得到空指针异常.我在onCreated()中定义了getMapAsync(this),然后尝试访问onResume()中的'googleMap'对象并获取空指针异常.有没有办法来解决这个问题?谢谢.
我正在尝试从SupportMapFragment获取地图,但它返回null.从我读到的这可能是因为片段尚未完全显示,因此没有地图存在?!我尝试使用executePendingTransactions()修复它,但到目前为止没有成功.
任何想法如何解决它?
这是代码
private GoogleMap map;
private SupportMapFragment mapFragment;
@Override
public void onCreate( Bundle savedInstanceState ) {
//...
super.onCreate( savedInstanceState );
setContentView( R.layout.screen_mission2 );
GoogleMapOptions mapOptions = new GoogleMapOptions();
mapOptions.mapType(GoogleMap.MAP_TYPE_NORMAL)
.compassEnabled(true)
.rotateGesturesEnabled(false)
.tiltGesturesEnabled(false);
android.support.v4.app.FragmentManager myFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentManager.enableDebugLogging(true);
mapFragment = SupportMapFragment.newInstance(mapOptions);
FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
fragmentTransaction.add(R.id.mapFragment, mapFragment);
fragmentTransaction.commit();
myFragmentManager.executePendingTransactions();
if(mapFragment == null) Base.log("mapFragment==null");
if(map==null){
map = mapFragment.getMap();
Base.log("map should have been initialized");
if(map==null) Base.log("map still null");
}
}
Run Code Online (Sandbox Code Playgroud)
和布局文件:
<fragment
android:id="@+id/mapFragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
它返回以下日志
V/FragmentManager(24224): add: SupportMapFragment{4078c4b8 id=0x7f06003d} …Run Code Online (Sandbox Code Playgroud) android google-maps-api-2 google-play-services supportmapfragment
我正在使用supportMapFragment里面的片段这就是为什么我使用this.getChildFragmentManager()如果这个错误请指导我
public static ClinicFragment newInstance() {
ClinicFragment fragment = new ClinicFragment();
return fragment;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
setTargetFragment(null , -1); // one of my tries
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_maps, null, false);
Log.i(TAG , "onCreateView");
mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
mapUtils = new MapUtils(getActivity());
.......
return view;
}
@Override
public void onMapReady(com.google.android.gms.maps.GoogleMap googleMap) {
mMap = googleMap;
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setOnMarkerClickListener(this);
}
@Override …Run Code Online (Sandbox Code Playgroud) 我有一个带有一些碎片的导航抽屉.每个片段在布局中都有一个MapFragment.最初,当应用程序运行导航抽屉时,单击打开片段一次,但是当我单击相同的导航项以第二次打开相同的片段(在访问其他片段之后)后,我得到以下错误onCreateView()
Binary XML file line #1: Error inflating class fragment
Run Code Online (Sandbox Code Playgroud)
下面是我的片段代码:
user_map_Fragment.xml
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:id="@+id/parentContainer"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="200dp"
android:name="com.google.android.gms.maps.MapFragment"/>
......
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
MainFragment.cs
public class MainFragement : Android.Support.V4.App.Fragment, IOnMapReadyCallback, ILocationListener, Android.Views.View.IOnKeyListener
{
private GoogleMap mMap;
private LocationManager _locationManager;
private string _locationProvider;
private Android.Locations.Location _currentLocation;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (v == null)
{
v = inflater.Inflate(Resource.Layout.Main, container, false);
SetUpMap();
InitializeLocationManager();
}
return v;
}
}
private void SetUpMap()
{
if …Run Code Online (Sandbox Code Playgroud) android google-maps android-fragments mapfragment supportmapfragment