【问题标题】:Already managing a GoogleApiClient with id 0 inside a Java Class已经在 J​​ava 类中管理 ID 为 0 的 GoogleApiClient
【发布时间】:2018-09-18 04:10:18
【问题描述】:

我在 java 类中创建了一个 GoogleMap,因此我可以多次重复使用它而无需重复代码。

我目前在同一个片段上有两张地图。一张地图,是供用户选择一个收集位置(物品拾取自)。第二张地图是交货地点(物品要去)。我的两个地图都可以工作,但是,当我尝试添加该行时,页面上的第二个地图崩溃了:

Fragment 内部,PostAJobFragment

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

我创建了一个地图实例并访问了我的 Java 类中的 setEditSearchAPIListener 方法。如下:

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 方法的答案。由于我的 Map 使用 Java 类而不是片段,因此它似乎不起作用。 有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: android google-maps fragment google-api-client


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      相关资源
      最近更新 更多