使用匕首在 Android mvp 上实施 GoogleApiClient?
Implementing GoogleApiClient on Android mvp using dagger?
我有几个问题,
首先,当我阅读一些文章时,我应该在 activity、
中实现 LocationListener、ConnectionCallback、OnConnectionFailedListener 接口
将这些类的实现分开放在不同的文件中是否正确?
像下面这样吗?
public class LocationListener implements
com.google.android.gms.location.LocationListener {
@Inject
Location mLastLocation;
@Override
public void onLocationChanged(Location location) {
// Assign the new location
mLastLocation = location;
// Displaying the new location on UI
}
}
在我的 activity 我处理 Showing the mLastLocation properties 中是否正确?
//Fields
@Inject
GoogleApiClient client;
Location mLastLocation;
//Fields
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
第二,provider方法应该怎么写?,我猜是这样的,大家有什么推荐的吗?
//Constructor
public LocationModule(Context context, GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
this.context = context;
this.callback = callback;
this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi() {
return new GoogleApiClient.Builder(context)
.addOnConnectionFailedListener(listener)
.addConnectionCallbacks(callback)
.addApi(LocationServices.API)
.build();
}
最后,我应该在哪里处理 android 6 及以上设备的权限?,是在视图上还是在演示者上?
听说View一定傻到不用测试了,我应该如何守住这个原则?
如果有人能给我一个参考,或者 github 示例代码,与我的情况相匹配,那就太好了。
首先,您可以将 MVP 视图层视为纯 Android 模块,这意味着与 Android 操作系统的任何通信(如请求权限)都必须使用该层处理,结果回到演示者那里决定下一步做什么。
关于分离那些 class 的实现,当我寻找 class 的一些代码时,我自己喜欢分离 classes 以获得更清晰的可视化!我认为没有人可以提出最佳实践建议,因为这取决于您的模块和实现。根据 Clean Code book,在这种类型的决策情况下,您必须更多地考虑代码的可读性。
最后,关于 LocationModule,它是完全正确的,但如果我处在你的位置,我什至会在更高级别的组件(例如 ApplicationComponent)中请求上下文,并且从 LocationModule 构造函数中删除它。
//Constructor
public LocationModule(GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
this.callback = callback;
this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi(Context context) {
return new GoogleApiClient.Builder(context)
.addOnConnectionFailedListener(listener)
.addConnectionCallbacks(callback)
.addApi(LocationServices.API)
.build();
}
可以使用更高模块中的相关提供程序提供上下文。
这是一个示例存储库,在这方面可以真正帮助您:
我有几个问题,
首先,当我阅读一些文章时,我应该在 activity、
中实现 LocationListener、ConnectionCallback、OnConnectionFailedListener 接口将这些类的实现分开放在不同的文件中是否正确?
像下面这样吗?
public class LocationListener implements
com.google.android.gms.location.LocationListener {
@Inject
Location mLastLocation;
@Override
public void onLocationChanged(Location location) {
// Assign the new location
mLastLocation = location;
// Displaying the new location on UI
}
}
在我的 activity 我处理 Showing the mLastLocation properties 中是否正确?
//Fields
@Inject
GoogleApiClient client;
Location mLastLocation;
//Fields
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
第二,provider方法应该怎么写?,我猜是这样的,大家有什么推荐的吗?
//Constructor
public LocationModule(Context context, GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
this.context = context;
this.callback = callback;
this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi() {
return new GoogleApiClient.Builder(context)
.addOnConnectionFailedListener(listener)
.addConnectionCallbacks(callback)
.addApi(LocationServices.API)
.build();
}
最后,我应该在哪里处理 android 6 及以上设备的权限?,是在视图上还是在演示者上?
听说View一定傻到不用测试了,我应该如何守住这个原则?
如果有人能给我一个参考,或者 github 示例代码,与我的情况相匹配,那就太好了。
首先,您可以将 MVP 视图层视为纯 Android 模块,这意味着与 Android 操作系统的任何通信(如请求权限)都必须使用该层处理,结果回到演示者那里决定下一步做什么。
关于分离那些 class 的实现,当我寻找 class 的一些代码时,我自己喜欢分离 classes 以获得更清晰的可视化!我认为没有人可以提出最佳实践建议,因为这取决于您的模块和实现。根据 Clean Code book,在这种类型的决策情况下,您必须更多地考虑代码的可读性。
最后,关于 LocationModule,它是完全正确的,但如果我处在你的位置,我什至会在更高级别的组件(例如 ApplicationComponent)中请求上下文,并且从 LocationModule 构造函数中删除它。
//Constructor
public LocationModule(GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
this.callback = callback;
this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi(Context context) {
return new GoogleApiClient.Builder(context)
.addOnConnectionFailedListener(listener)
.addConnectionCallbacks(callback)
.addApi(LocationServices.API)
.build();
}
可以使用更高模块中的相关提供程序提供上下文。
这是一个示例存储库,在这方面可以真正帮助您: