Я получаю GoogleMap.clear с нулевой ссылкой на объект - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть приложение на основе Google Maps, и оно работало с методами getMap (), теперь с новой моделью getMapAsync возникают проблемы, когда я хочу очистить или вообще использовать объект GoogleMap,

java.lang.NullPointerException: попытка вызвать виртуальный метод void com.google.android.gms.maps.GoogleMap.clear () для пустой ссылки на объект.

Я использую фрагмент.

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_passenger_page1,
                container, false);
        MapFragment fm = (MapFragment) mainActivity.getFragmentManager().findFragmentById(R.id.map);
        fm.getMapAsync(this);
...
}

проблема здесь, когда я использую:

   @Override
    public void onResume() {

mMap.clear();

        if (listMarkers.size() > 0)

        {
            setMarker(listMarkers);
        }
        super.onResume();

    }

Эта функция вызывается каждый раз, когда приложение открывается, и говорит, что mMap имеет значение null.

Пожалуйстапомоги мне.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

спасибо за ваши комментарии, я решил свою проблему, вызвав функцию clear () в onResume, проверив, существует ли GoogleMap и, если она не создана, и перейдя в mMap.

 @Override
public void onResume() {

    clear();
    if (listMarkers.size() > 0)

    {
        setMarker(listMarkers);
    }
    super.onResume();

}

Функция clear выглядитнапример:

public void clear() {

    GoogleMap gm = createMap();
    if (gm == null) {
        Log.e("clear", "The map is null"); //for testing purposes
        return;

    } else {
        Log.e("clear", "The map already exists"); //for testing purposes
        mMap = gm;
        mMap.clear();
    }


    startLocation = null;
    endLocation = null;
    txtFrom.setText("");
    txtTo.setText("");

}

И, наконец, createMap ():

 private GoogleMap createMap() {

    if (mMap != null) {
        Log.e("create", "The map already exists"); // for testing purposes
        return mMap;
    }
    MapFragment fm = (MapFragment) 
    mainActivity.getFragmentManager().findFragmentById(R.id.map);
    try {
        fm.getMapAsync(this);
    } catch (Exception ex) {
        Log.e("Error", ex.getLocalizedMessage());
    }

    return null;

}

Таким образом, я всегда создаю новый GoogleMap, если он не существует.

Если я делаю что-то не так, не стесняйтесь сказать мне:)

0 голосов
/ 03 декабря 2018

пожалуйста, реализуйте интерфейс OnMapReadyCallback и переопределите

 @Override
 public void onMapReady(GoogleMap googleMap) {
    this.googleMap = googleMap;
    googleMap.clear()
    if (listMarkers.size() > 0)

    {
        setMarker(listMarkers);
    }


 }

и удалите код из методов возобновления

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