Получение случайного исключения getmapASync с нулевым указателем - PullRequest
0 голосов
/ 30 сентября 2019

Я делаю простой просмотр карты на острове Ява в Индонезии. В настоящее время у меня проблема с созданием фрагмента карты, в частности, в getMapASync , возвращающем ссылку на нулевой указатель, в соответствии с logcat.

Вот мой код:

 private GoogleMap java__island_map;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    SupportMapFragment javamapFragment = (SupportMapFragment) this.getSupportFragmentManager().
            findFragmentById(R.id.java_island_map);
    javamapFragment.getMapAsync(this);

}
@Override
public void onMapReady(GoogleMap googleMap) {
    java__island_map = googleMap;

    LatLng JavaIsland = new LatLng(-7.50166466, 111.257832302);
    java__island_map.addMarker(new MarkerOptions().position(JavaIsland).title("Java Island"));
    java__island_map.moveCamera(CameraUpdateFactory.newLatLng(JavaIsland));
}

Поскольку это не форма дочернего фрагмента, я попытался использовать getChildSupportFragment безрезультатно. Затем я попытался исправить фрагмент, чтобы он стал обычным MapFragment , не работает. Вот мой XML-код:

 <fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/java_island_map"
    class="com.google.android.gms.maps.SupportMapFragment"
    android:layout_gravity="center">

</fragment>
<ScrollView .... etc

Что я тут не так сделал? Это мне очень поможет, так же как и для других пользовательских интерфейсов на основе карт.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы можете обработать null перед вызовом getMapAsync(). вроде следующего

 supportMapFragment = (SupportMapFragment) getSupportFragmentManager.findFragmentById(R.id.java_island_map);
 if (supportMapFragment == null) {
     FragmentManager fr = getFragmentManager();
     FragmentTransaction ft = fr.beginTransaction();
     supportMapFragment = SupportMapFragment.newInstance();

     ft.replace(R.id.java_island_map, supportMapFragment).commit();
  }
  supportMapFragment.getMapAsync(this);

Надеюсь, это поможет вам.

0 голосов
/ 30 сентября 2019

Попробуйте переместить вызов getMapAsync () в onActivityCreated ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...