java.lang.IllegalStateException: уже управляет GoogleApiClient с идентификатором 0

Я получаю latitude и longitude, используя GPS в моем application. Я использую GoogleApiClient для этого. У меня есть Activity с именем "HomeActivity", для которого я создал заголовок и FrameLayout, чтобы показать другие fragments в этом Activity. У меня также есть кнопка настройки в моем заголовке.

Теперь проблема:

В одном из моих фрагментов под названием «Фрагмент» я извлекаю latitude и longitude и использую их для какой-то работы. И при настройке button я открываю dialog, который сразу же получает текущую широту и долготу. Но проблема в том, что когда я нахожусь на «Фрагменте», а также открываю Dialog, то иногда мое приложение падает и выдает ошибку, т.е. «Уже управляю GoogleApiClient с идентификатором 0». И ошибка прямо указывает на мой код Dialog. Я провел несколько часов работы и исследований, но не смог решить проблему. Пожалуйста помоги.

Код для открытия диалогового окна с помощью кнопки «Настройка» в заголовке HomeActivity

    // onClickListener on Setting button
      case R.id.setting:
            DialogSettings dc = new DialogSettings(HomeActivity.this, HomeActivity.this,"HomeActivity",HomeActivity.this);
            dc.show();

Код для диалога, где мы получаем широту и долготу

    public class DialogSettings extends Dialog implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener {


    Context context;
    private GoogleApiClient googleApiClient;
    AppCompatActivity appCompatActivity;


    public DialogSettings(Activity a, Context context, String currentActivity, AppCompatActivity appCompatActivity) {
        super(a);
        this.context = context;
        this.currentActivity = currentActivity;
        this.appCompatActivity = appCompatActivity;
    }


    // point out error on this code
    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        setUpGClient();


    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();

        googleApiClient.stopAutoManage((AppCompatActivity) context);
        googleApiClient.disconnect();

    }


    // point out error on this code 
    private synchronized void setUpGClient() {
        googleApiClient = new GoogleApiClient.Builder(context)
                .enableAutoManage(((AppCompatActivity) context), 0, this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        googleApiClient.connect();
    }


}

Код для «Фрагмента», который также извлекает широту и долготу

     public class UwLocalePolitieFragment extends Fragment implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener {


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


    private synchronized void setUpGClient() {
        googleApiClient = new GoogleApiClient.Builder(getActivity())
                .enableAutoManage(getActivity(), 0, this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        googleApiClient.connect();
    }


    @Override
    public void onStart() {
        super.onStart();


        setUpGClient();
    }


}

person Android Developer    schedule 14.12.2017    source источник


Ответы (1)


Просто измените enableAutoManage (getActivity (), 0, это)

Чтобы включить AutoManage (getActivity (), 1, это)

person Hagar Magdy    schedule 30.12.2020