Я хочу использовать MVP + GoogleMap. Для первого запуска работает все идеально, но когда я вращаю телефон получаю NullExeption
в addMarkersOnMap
потому что GoogleMap еще не создался.
Объясните пожалуйста логику, как правильно нужно работать с такими приложениями когда кроме Rx есть еще и CallBack. Я понимаю что мой код не правильный. Поэтому и ожидаю в свой адрес критику, но с объяснением. Заранее спасибо.
public class MainActivity extends MvpAppCompatActivity implements IMain, OnMapReadyCallback { @InjectPresenter MainPresenter presenter; @BindView(R.id.frameProgress) FrameLayout frameProgress; private GoogleMap googleMap; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void showProgress() { frameProgress.setVisibility(View.VISIBLE); } @Override public void hideProgress() { frameProgress.setVisibility(View.INVISIBLE); } @Override public void onMapReady(GoogleMap googleMap) { this.googleMap=googleMap; } @Override public void addMarkersOnMap(Place place) { for (Place.DataItem item: place.getData()) { LatLng latLng=new LatLng(item.getLat(),item.getLng()); googleMap.addMarker(new MarkerOptions().position(latLng)); } } }
@InjectViewState public class MainPresenter extends MvpPresenter<IMain> { @Override protected void onFirstViewAttach() { super.onFirstViewAttach(); getViewState().showProgress(); ApiRequest.getPlace() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnTerminate(() -> getViewState().hideProgress()) .subscribe(place -> { getViewState().addMarkersOnMap(place); },throwable -> { Log.e("MainPresenter=onFirstViewAttach", throwable.getMessage() + ""); }); } }