在片段中使用 enableAutoManage()
using enableAutoManage() in fragment
还有其他方法可以连接 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();
我无法处理它,因为当我用 getActivity()
替换 this
时,我在转换时遇到很多问题
感谢您的帮助,如果这个问题很愚蠢,我们深表歉意。
如果您想使用 enableAutoManage
,那么您必须使 activity 扩展 FragmentActivity
。 GoogleApiClient
的自动管理工作需要它进行的回调。因此,最简单的解决方案是将 extends FragmentActivity
添加到您的 activity。这样您的转换就不会失败并导致应用程序在运行时崩溃。
替代解决方案是您自己管理 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();
}
如果您的片段 运行 在 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();
抱歉回复晚了,您可以扩展 AppCompatActivity 而不是扩展 FragmentActivity...
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();
我的解决方案与接受的答案类似,除了我使用 Builder 的第二个签名,以便 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();
}
还有其他方法可以连接 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();
我无法处理它,因为当我用 getActivity()
替换 this
时,我在转换时遇到很多问题
感谢您的帮助,如果这个问题很愚蠢,我们深表歉意。
如果您想使用 enableAutoManage
,那么您必须使 activity 扩展 FragmentActivity
。 GoogleApiClient
的自动管理工作需要它进行的回调。因此,最简单的解决方案是将 extends FragmentActivity
添加到您的 activity。这样您的转换就不会失败并导致应用程序在运行时崩溃。
替代解决方案是您自己管理 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();
}
如果您的片段 运行 在 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();
抱歉回复晚了,您可以扩展 AppCompatActivity 而不是扩展 FragmentActivity...
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();
我的解决方案与接受的答案类似,除了我使用 Builder 的第二个签名,以便 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();
}