已经在 J​​ava 类中管理 ID 为 0 的 GoogleApiClient

Posted

技术标签:

【中文标题】已经在 J​​ava 类中管理 ID 为 0 的 GoogleApiClient【英文标题】:Already managing a GoogleApiClient with id 0 inside a Java Class 【发布时间】: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 类而不是片段,因此它似乎不起作用。 有什么办法可以解决这个问题吗?

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于已经在 J​​ava 类中管理 ID 为 0 的 GoogleApiClient的主要内容,如果未能解决你的问题,请参考以下文章

如何替换已经在 J​​ava 中打印在屏幕上的文本?

关于j使用ava匿名类的好处总结

《大道至简》第一章j愚公移山ava伪代码

ava. lang. NullPointerException com. ajax. connection. ConnectionUtil findProvinces(ConnectionUtil j

ava. lang. NullPointerException com. ajax. connection. ConnectionUtil findProvinces(ConnectionUtil j

ava Maven项目之Nexus私服搭建和版本管理应用