gpt4 book ai didi

java - 在 fragment 中引用 MapView 时出现异常 - OSMdroid

转载 作者:行者123 更新时间:2023-11-29 19:04:47 26 4
gpt4 key购买 nike

我已经使用 Activity 使用 OSMdroid 编写了一个应用程序,但我现在正在尝试将其移植到 fragment (尽管我是 fragment 的新手)。我收到错误:“java.lang.NullPointerException:尝试在空对象引用上调用虚方法‘void org.osmdroid.views.MapView.setBuiltInZoomControls(boolean)’”

好像MapView还没有初始化,我是不是初始化错地方了(OnCreateView)?根据 Activity 生命周期,OnCreate 在 OnCreateView 之前被调用,因此无法识别它是有道理的,但我对将代码放在哪里感到困惑。

我实现 fragment 的代码:

 //inflating fragment layout
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_map, container, false);
map = (MapView) view.findViewById(R.id.map);
return view;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context));

setupMap();
}

//initializing map
private void setupMap() {
//adding zoom and touch controls
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);

//getting current location using coarse/fine location so we can set centerpoint
currentLocation = getCurrentLocation();

... code continues ...

错误堆栈跟踪:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void org.osmdroid.views.MapView.setBuiltInZoomControls(boolean)' on a null object reference
at skicompanion.skicompanion.MapFragment.setupMap(MapFragment.java:101)
at skicompanion.skicompanion.MapFragment.onCreate(MapFragment.java:86)
at android.app.Fragment.performCreate(Fragment.java:2214)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1153)
at android.app.BackStackRecord.run(BackStackRecord.java:800)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1562)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:487)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5765)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

最佳答案

在您发布的代码中,您似乎不需要在您的案例中重写 onCreate 方法。只需移动此代码:

    context = getActivity();
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context));

setupMap();

在返回调用之前进入 onCreateView 方法,应该没问题。

关于java - 在 fragment 中引用 MapView 时出现异常 - OSMdroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com