Уже управляет GoogleApiClient с идентификатором 0 внутри класса Java

Я создал GoogleMap внутри класса java, поэтому я могу использовать его несколько раз, не повторяя код.

У меня сейчас две карты на одном фрагменте. Одна карта предназначена для выбора пользователем места сбора (предмет, из которого забирается). Вторая карта предназначена для места доставки (Товар отправляется). Обе мои карты работают, однако вторая карта на странице разбилась, когда я пытаюсь добавить строку:

Внутренний фрагмент, PostAJobFragment

// editTextSearch is an AutoCompleteTextView
map2.setEditSearchAPIListener(editTextSearch2, getActivity());

Я создал экземпляр карты и получил доступ к методу setEditSearchAPIListener в моем классе Java. Это выглядит следующим образом:

Внутри класса Java, карта

public GoogleApiClient setEditSearchAPIListener(AutoCompleteTextView editTextSearch, FragmentActivity fragmentActivity)
    {
        mGoogleApiClient1 = new GoogleApiClient
                .Builder(fragmentActivity)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .enableAutoManage(fragmentActivity, this)
                .build();

        editTextSearch.setOnItemClickListener(mAutocompleteItemClickListener);
        placeAutocompleteAdapter = new PlaceAutocompleteAdapter(fragmentActivity, mGoogleApiClient1, LAT_LNG_BOUNDS, null);
        editTextSearch.setAdapter(placeAutocompleteAdapter);

        return mGoogleApiClient1;
    }

    @Override
    public void onPause() {
        super.onPause();
        mGoogleApiClient1.stopAutoManage(getActivity());
        mGoogleApiClient1.disconnect();
    }

Я получаю сообщение об ошибке 'java.lang.IllegalStateException: Already managing a GoogleApiClient with id 0'

Я просмотрел другие ответы, в которых говорится об использовании метода onPause. Поскольку моя карта использует класс Java, а не фрагмент, он, похоже, не работает. Как я могу это исправить?

1
0
1 340
1

Ответы 1

Я исправил свою проблему. При создании GoogleApiClient я пытаюсь создать его в классе Java в методе под названием setGoogleApiClient. Один раз он успешно запустился, но во второй раз вылетел.

Я поместил код в метод onCreateView в моем предыдущем фрагменте, и он отлично работает.

@Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                             Bundle savedInstanceState)
    {
        final View view = inflater.inflate(R.layout.fragment_post_an_advert, container, false);
        layoutView = view;

        // Collection Map
        map1 = new Map();
        map2 = new Map();
        getViewsByIds(view);

        // Create google api client, so user has pre-set options to select.
        /*
      The main entry point for Google Play services integration
     */
       mGoogleApiClient1 = new GoogleApiClient
                .Builder(getActivity())
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .enableAutoManage(getActivity(), 0, this)
                .build();

        PlaceAutocompleteAdapter placeAutocompleteAdapter = new PlaceAutocompleteAdapter(getActivity(), mGoogleApiClient1, LAT_LNG_BOUNDS, null);
        map1.setPlaceAutocompleteAdapter(placeAutocompleteAdapter);
        map1.setmGoogleApiClient1(mGoogleApiClient1);

        map2.setPlaceAutocompleteAdapter(placeAutocompleteAdapter);
        map2.setmGoogleApiClient1(mGoogleApiClient1);

        editTextSearch.setOnItemClickListener(map1.mAutocompleteItemClickListener);
        editTextSearch2.setOnItemClickListener(map2.mAutocompleteItemClickListener);

        editTextSearch.setAdapter(placeAutocompleteAdapter);
        editTextSearch2.setAdapter(placeAutocompleteAdapter);

Другие вопросы по теме