私はアクティビティを使用してOSMdroidでアプリケーションを作成しましたが、今はフラグメントに移植しようとしています。 「のjava.lang.NullPointerExceptionが::nullのオブジェクト参照に 『無効org.osmdroid.views.MapView.setBuiltInZoomControls(boolean)を』仮想メソッドを呼び出すための試みは、」フラグメント内のMapViewを参照する際の例外 - OSMdroid
MapViewのを持っているようだ、私はエラーを取得していますまだ初期化されていない、私は間違った場所(OnCreateView)で初期化していますか?アクティビティライフサイクルによれば、OnCreateはOnCreateViewの前に呼び出されるため、認識されないという意味になりますが、コードをどこに配置するのか混乱します。
コードの断片の私の実装のために:
//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 ...
エラースタックトレース:あなたはあなたのケースでメソッドをのonCreateオーバーライドする必要があるようなあなたの投稿をコードで
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メソッド内でgetActivityを呼び出すことも危険です。この時点で、フラグメントはアクティビティーにアタッチされていない可能性があります。その後、getActivity()= nullにつながります。これをonActivityCreated()内で行うと良いでしょう。 –
もちろん、上に追加しました。だから、私はonActivityCreated()の代わりにすべてのマップの実装を追加する必要がありますか?ライフサイクルでonCreateの後にあるので、これは意味をなさないでしょう。 –
onActivityCreatedでonCreateViewとコンテキストベースの呼び出しでビュー要素を初期化します。 –