web-dev-qa-db-ja.com

フラグメントでenableAutoManage()を使用する

Google APIクライアントを接続する別の方法はありますか?

私はオートコンプリートプレースを使用し、MYFRAGMENTのどこかにこのコードを使用する必要があります

_mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
                .addApi(Places.GEO_DATA_API)
                .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                .addConnectionCallbacks(this).build();
_

私の問題

_enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                    .addConnectionCallbacks(this).build();
_

thisgetActivity()に置き換えると、キャストに多くの問題があるため、対処できません。

この質問が馬鹿げている場合は助けてくれてありがとう。

24
Hamza Dabjan

enableAutoManageを使用する場合は、アクティビティをFragmentActivityに拡張する必要があります。 GoogleApiClientの自動管理が機能するには、コールバックが必要です。したがって、最も簡単な解決策は、アクティビティに_extends FragmentActivity_を追加することです。そうすれば、キャストは失敗せず、実行時にアプリがクラッシュします。

別の解決策は、APIクライアントを自分で管理することです。ビルダーからenableAutoManage行を削除し、クライアントからconnect/disconnectを確認します。これを行う最も一般的な場所は、onStart()/onStop()です。何かのようなもの...

_@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this).build();
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    mGoogleApiClient.disconnect();
}
_
61
Matthew Pape

返信が遅れて申し訳ありませんが、FragmentActivityを拡張するのではなく、AppCompatActivityを拡張できます...

public class YourActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener 

.....

mCredentialsApiClient = new GoogleApiClient.Builder(context)
                    .addConnectionCallbacks(this)
                    .enableAutoManage(this,this)
                    .addApi(Auth.CREDENTIALS_API)
                    .build();
2
Shivam Mathur

フラグメントがFragmentActivityまたはAppCompatActivityで実行されている場合、次のようなことができます。

        mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .enableAutoManage((FragmentActivity) getActivity() /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    // your code here
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
1
Reid

私の解決策は受け入れられた答えに似ていますが、ビルダーの2番目の署名を使用するため、connectionFailedListenerもコンストラクターに送信されます。

mGoogleApiClient.connect()およびmGoogleApiClient.disconnect()でそれぞれonStart()およびonStop()が続きます

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(this /*context*/ , this /*connectedListener*/, this /**connectionFailedListener/)
            .addApi(Places.GEO_DATA_API)
            .build();
}
0
Ajitsen